Tijdelijke link voor downloaden van bestanden
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?
Hoezo zonder mod_rewrite? Je kan het al voor elkaar krijgen met een paar regels code.
PHP Maarten op 28/09/2015 16:50:23:
Hoezo zonder mod_rewrite? Je kan het al voor elkaar krijgen met een paar regels code.
Ik heb, in dit geval m.b.v. mysql, de uniqid + link opgeslagen.
Maar dat laat niet overlet dat de Header nog steeds de exacte locatie weergeeft.
Ik ga ervan uit dat het ook dmv. een SESSION kan. De werkwijze is dan hetzelfde.
Maar dat blijf ik nog steeds met de Header stoeien.
Wat is jou aanpak in deze?
Quote:
Voor iedere locatie een mod_rewrite (tijdelijk) aanmaken lijkt mij geen optie.
Uhm, 1 RewriteRule hiervoor is genoeg? Iets van de vorm /download/<code> --> /downloadscript.php?code=<code>
(of zonder rule, rechtstreeks via dit script)
Voordat je de download aanbiedt controleer je in dit script of deze code nog geldig is (nog niet is gedownload of meerdere keren gedownload mag worden voor een bepaalde datum).
Gewijzigd op 28/09/2015 17:25:33 door Thomas van den Heuvel
Thomas van den Heuvel op 28/09/2015 17:24:14:
Uhm, 1 RewriteRule hiervoor is genoeg? Iets van de vorm /download/<code> --> /downloadscript.php?code=<code>
Dan laat de Header nog steeds de exacte locatie zien:
//1.local/download/3102/file1.exe
Toevoeging op 28/09/2015 18:01:46:
Ter info:
Ik gebruik dit in mijn .htaccess
RewriteRule ^download/(.*)$ _link.php?tid=$1 [L]
En als ik Firebug in mijn browser open en de download/ url laad
dan staat onder Net -> Headers -> Location:
niet download* of _link.php*
maar de exacte locatie...
Zie ik iets over het hoofd?
Gewijzigd op 28/09/2015 17:42:17 door Tim DK
Je hoeft niet te redirecten, je kan ook direct de inhoud van het bestand doorsturen.
Ben van Velzen op 28/09/2015 19:11:29:
Je hoeft niet te redirecten, je kan ook direct de inhoud van het bestand doorsturen.
Het gaat hier om audio files die in bijv. <audio> afgespeeld moeten kunnen worden.
Via file_contents... (ik neem aan dat dát is wat je bedoelt) geeft dan weer problemen
met het afspelen, bijvoorbeeld vooruit spoelen. Een audio bestand kan dan alleen van af het begin beginnen, en andere controls (bijv. de tijdsduur) werken dan ook niet.
Het enige wat ik nog kan bedenken is een chmod 0600 <-> 0000
Met een toegangcontrole en daarna een readfile() met de juiste headers kan je anderen deze weer laten downloaden.
Precies. En daar doel ik op, je hoeft niet te redirecten, je hoeft alleen de inhoud van het bestand door te geven, uiteraard met de juiste headers.
Uiteraard buiten de webroot is een optie. Maar de html5 <audio> tag werkt dan niet meer naar behoren:
- Geen tijdsindicatie
- begint hij direct met afspelen (autoplay)
- kan je alleen vooraan beginnen
- geen scroll forward/backward
Als jullie daar een antwoordt op hebben...
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.
- 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
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$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);
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.:
Echter, in dit geval wordt de source van het bestand weergegeven... :/
Als ik de pagina direct open dan wordt het bestand wel afgespeeld.
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?
Wat zie je nu eigenlijk precies?
De source van de mp3.
Zo iets als dit:
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');
header('Content-Type: audio/mpeg');
Alleen voor mp3 idd..
Met alleen audio/mpeg ook geprobeerd met hetzelfde resultaat, binary source output.
Controleer de MP3-file eens via: http://web-sniffer.net/
- Aar - op 29/09/2015 15:14:53:
Dan worden er vreemde headers gebruikt...
Controleer de MP3-file eens via: http://web-sniffer.net/
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.
Kijk zelf maar op web-sniffer:
Quote:
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
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.
Gewijzigd op 29/09/2015 15:42:25 door - Ariën -
- 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.
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.
Deze moet de headers tonen die de MP3-file ook daadwerkelijk heeft. Dus beiden moeten gelijk zijn.