Doormiddel van uniqid() gekoppeld aan een locatie van het bestand, en deze in een database op te slaan is het mogelijk om een tijdelijk link te maken, waardoor de gebruiker het bestand kan downloaden.

Echter in de Headers van Firebug is de exacte locatie nog altijd terug te vinden.

Uiteraard kan ik via mod_rewrite dit nog (deels) aanpassen. Maar het gaat om vele bestanden
waarvan ik wil dat ze voor 1 keer of een bepaalde tijd toegankelijk zijn zonder dat de exacte locatie
kan worden achterhaald. Voor iedere locatie een mod_rewrite (tijdelijk) aanmaken lijkt mij geen optie.

Iemand een idee hoe dit wel te bewerkstelligen, zonder in te loggen?
- Aar - op 29/09/2015 13:01:16

Je moet die audio dan ophalen via readfile(). Echter de player kan je pas tonen als iemand gerechtigd is om die audio te mogen downloaden.


rechten: 0600 + apache (_www) is voldoende

pagina: audio.php

$file = "/home/non_public/mp3/test.mp3";

    header('Content-type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3');
    header('Content-Disposition: filename=test.mp3');
    header('Cache-Control: no-cache');
    readfile($file);


Moet er wel bij vermelden dat de pagina (audio.php) word ingeladen dmv.:

$.ajax({
  type: 'POST',
url:"audio.php", 


Echter, in dit geval wordt de source van het bestand weergegeven... :/
Als ik de pagina direct open dan wordt het bestand wel afgespeeld.


Als je PHP-source ziet, dan mis je de PHP-tags of gebruik je de verouderde short-tags?
Wat zie je nu eigenlijk precies?
- Aar - op 29/09/2015 14:46:36

Als je PHP-source ziet, dan mis je de PHP-tags of gebruik je de verouderde short-tags?
Wat zie je nu eigenlijk precies?


De source van de mp3.
Zo iets als dit:

????h???'?? 1c??PV:??L???pN??5y?N??M???c?bX "X?@??|K??? @??9<??00?,K3?~?...-knip-

Dus hij laat de mp3 wel maar (ik vermoed) omdat hij door de functie wordt gehaald
er een probeem onstaat met de header. Dat kan niet anders.
En als je expliciet de header voor MP3 alleen gebruikt?

header('Content-Type: audio/mpeg');
- Aar - op 29/09/2015 15:04:27

En als je expliciet de header voor MP3 alleen gebruikt?

header('Content-Type: audio/mpeg');


Alleen voor mp3 idd..
Met alleen audio/mpeg ook geprobeerd met hetzelfde resultaat, binary source output.
- Aar - op 29/09/2015 15:14:53

Dan worden er vreemde headers gebruikt...
Controleer de MP3-file eens via: http://web-sniffer.net/


Test mp3 is van https://archive.org/download/testmp3testfile/mpthreetest.mp3

GET /download/testmp3testfile/mpthreetest.mp3 HTTP/1.1[CRLF]
Host: archive.org[CRLF]
Connection: close[CRLF]
User-Agent: Web-sniffer/1.1.0 (+http://web-sniffer.net/)[CRLF]
Accept-Encoding: gzip[CRLF]
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
Cache-Control: no-cache[CRLF]
Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]
Referer: http://web-sniffer.net/[CRLF]
[CRLF]

Ik heb nog een andere geprobeerd (just in case) maar met wederom hetzelfde resultaat.
Die URL is zelf al een 302 header, waarbij je de location-header moet volgen.
Kijk zelf maar op web-sniffer:


Status: HTTP/1.1 302 Moved Temporarily
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 29 Sep 2015 13:38:06 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/5.5.9-1ubuntu4.11
Access-Control-Allow-Origin: *
Accept-Ranges: bytes
Location: https://ia802508.us.archive.org/5/items/testmp3testfile/mpthreetest.mp3


Het volgen kan met cURL, met het gebruik van de CURLOPT_FOLLOWLOCATION (true) parameter.
- Aar - op 29/09/2015 15:40:17

Die URL is zelf al een 302 header, waarbij je de location-header moet volgen.
Kijk zelf maar op web-sniffer:
Het volgen kan met cURL, met het gebruik van de CURLOPT_FOLLOWLOCATION (true) parameter.


Ik weet niet precies wat je bedoelt maar die mp3test.mp3 heb ik gedownload en op mijn server gezet. Immers is het doel de mp3 af te spelen in de webpagina waarbij het bestand buiten de webroot staat.
Die mp3 wordt aangeroepen door een PHP-script. Dus laat die PHP-file eens door web-sniffer 'sniffen'?
Deze moet de headers tonen die de MP3-file ook daadwerkelijk heeft. Dus beiden moeten gelijk zijn.

Reageren