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?
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.
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).
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
[size=xsmall]Toevoeging op 28/09/2015 18:01:46:[/size]
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...
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
Je kan de echte bestanden toch buiten je webroot opslaan? Dan kan niemand er direct bij.
Met een toegangcontrole en daarna een readfile() met de juiste headers kan je anderen deze weer laten downloaden.
@Aar en @Ben
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