Dateidownload nur über PHP-Script
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
all
annehmen
art
break
code
datei
dateiname
direkten zugriff
download
file
funktionieren
header
http
hundert
kommando
normaler zugriff
parameter
transfer
versuchen
zufall
-
Ich verwende derzeit folgendes PHP-Script, um vor dem Download-Start einer Datei von meinem Server einen Download-Zähler hochzuzählen.
<?php $path="./downloads/"; $f = @strip_tags($_GET['f']); if ($f!="") { $dir_handle = @opendir($path) or die("Unable to open ".$path); while ($file = readdir($dir_handle)) { if (!is_dir($file)) { if ($file==$f) { rename($path.$file,$path."0:0:".$file); $file = "0:0:".$file; } $fparts = preg_split('/:/',$file); if ((count($fparts)>1) && ($fparts[2]==$f)) { $dlcount = intval($fparts[0])+1; $frandom = hash("md5",microtime()); $newfilename=$dlcount.":".$frandom.":".$f; rename($path.$file,$path.$newfilename); break; } } } if (isset($newfilename) && ($newfilename!="")) { header('Content-type: application/zip'); header('Content-Disposition: attachment; filename="'.$f.'"'); header("Content-Transfer-Encoding: binary"); readfile($path.$newfilename); } } ?>
Der Download wird dann halt zum Beispiel mit "http://domainname.at/download.php?f=dateiname.zip" gestartet.
Der Code funktionierte für meine bisherigen Zwecke sehr gut, hatte den Zähler direkt im Dateinamen und vergab auch gleich immer einen Zufalls-Hash, um einen direkten Link auf die Datei unmöglich zu machen.
Ich habe in letzter Zeit aber festgestellt, dass das "readfile()" Kommando von PHP bei größeren Dateien nicht zu funktionieren scheint.
Bei meinen derzeitigen Tools, die meist nur ein paar hundert KB an Größe hatten, funktionierte der Download einwandfrei.
Sobald die Dateien aber eine Größe von mehreren MB annehmen, und ich dann versuche, sie über das Script runterzuladen, wird zwar der Zähler hochgezählt, aber ich erhalte nur eine weiße Seite und es passiert nichts. (Download startet nicht)
Das scheint eine Art Größenbegrenzung für PHP-Downloads zu sein?!?
Ich habe dazu nirgends einen Parameter gefunden, den man größenmäßig anpassen könnte, sowie das in der "php.ini" ja auch mit der Upload-Größe machbar währe.
Ich habe mir allerdings überlegt, erst mittels htaccess den direkten Zugriff auf die Datei zu Blocken....z.B.:
<Files "dateiname.zip"> Deny from all </Files>
....und nur den Redirect auf diese Datei mittels PHP-Script zu erlauben....
<?php header( 'Location: http://domainname.at/downloads/dateiname.zip' ) ; ?>
Da könnte ich dann vorher noch eine Zählfunktion einbauen.
Würde das funktionieren, oder würde dieser Redirect als ganz normaler Zugriff via Browser gewertet werden und auch über htaccess geblockt werden?
Wie mach ich das am besten, dass der Download nur über das PHP-Script klappt? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Um den Fehler in deinem PHP Script zu finden solltest du mal versuchen die Fehlerausgabe einschuschalten.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage