TchiboMann
Erfahrenes Mitglied
Hallo Kollegen
Heut hab ich mal ein (kleines ) Problem. Bin momentan dabei einen Downloader zu schreiben, der die echte URL der Downloaddatei versteckt.
Ich hab es erst per readfile(); versucht, kleinere Dateien gehen ohne Probleme. Ich erwarte aber eine Dateigröße von ca 1GB, habe daher mal versucht mit dem Downloader ein 700MB großes File herunterzuladen. Tja leider klappr das gar nicht! Der Browser fängt an zu ziehen und beendet den Download 2-5KB später.
Das Ganze läuft auf meinem Linux-Server (2GB RAM). Ich hab den Downloader auf meinem Heimrechner ausprobiert - hier funktionieren 500MB lockerflockig ohne Probleme (Windows Vista 3,25GB RAM).
Nu hab ich etwas recherchiert und hab herausgefunden, dass das wohl am PHP memory_limit liegt, das bei mir auf 32M gesetzt ist. Guuuuut, ich könnts natürlich auf 1.5G erhöhen, allerdings wird dann nur jeweils einer, vielleich zwei Leute die Datei downloaden. Ist natürlich etwas, nunja, bekloppt, weil ich einen recht großen Andrang erwarte
Nun hatte ich dann auch folgenden Code gefunden, der eigentlich abhilfe schaffen soll:
Problem: Es funktioniert nicht nach 30MB wird der Download gestoppt... Ich denke mal, dass es auch hier am PHP memory_limit liegt, blos versteh ich da nicht warum, denn nach dem print wird die Variable doch wieder überschrieben, also dürften da doch nur 1024x1024 bytes vom memory genutzt werden? unset($buffer); direkt hinter print $buffer; bringt garnix, weil da wieder das Problem mit dem sofortigen Downloadstopp auftritt...
Bin da im Moment etwas überfragt und am Ende meines Wissens, mir fällt da grad nichts zu ein...
Hat jemand von Euch das Problem schonmal umgehen können oder eine andere, effiziente Art gefunden die wahre URL des Downloads vor allen zu verbergen?
// code den ich nutze, nur der wichtigste Teil davon:
Heut hab ich mal ein (kleines ) Problem. Bin momentan dabei einen Downloader zu schreiben, der die echte URL der Downloaddatei versteckt.
Ich hab es erst per readfile(); versucht, kleinere Dateien gehen ohne Probleme. Ich erwarte aber eine Dateigröße von ca 1GB, habe daher mal versucht mit dem Downloader ein 700MB großes File herunterzuladen. Tja leider klappr das gar nicht! Der Browser fängt an zu ziehen und beendet den Download 2-5KB später.
Das Ganze läuft auf meinem Linux-Server (2GB RAM). Ich hab den Downloader auf meinem Heimrechner ausprobiert - hier funktionieren 500MB lockerflockig ohne Probleme (Windows Vista 3,25GB RAM).
Nu hab ich etwas recherchiert und hab herausgefunden, dass das wohl am PHP memory_limit liegt, das bei mir auf 32M gesetzt ist. Guuuuut, ich könnts natürlich auf 1.5G erhöhen, allerdings wird dann nur jeweils einer, vielleich zwei Leute die Datei downloaden. Ist natürlich etwas, nunja, bekloppt, weil ich einen recht großen Andrang erwarte
Nun hatte ich dann auch folgenden Code gefunden, der eigentlich abhilfe schaffen soll:
PHP:
function readfile_chunked($filename) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
print $buffer;
}
return fclose($handle);
}
Problem: Es funktioniert nicht nach 30MB wird der Download gestoppt... Ich denke mal, dass es auch hier am PHP memory_limit liegt, blos versteh ich da nicht warum, denn nach dem print wird die Variable doch wieder überschrieben, also dürften da doch nur 1024x1024 bytes vom memory genutzt werden? unset($buffer); direkt hinter print $buffer; bringt garnix, weil da wieder das Problem mit dem sofortigen Downloadstopp auftritt...
Bin da im Moment etwas überfragt und am Ende meines Wissens, mir fällt da grad nichts zu ein...
Hat jemand von Euch das Problem schonmal umgehen können oder eine andere, effiziente Art gefunden die wahre URL des Downloads vor allen zu verbergen?
// code den ich nutze, nur der wichtigste Teil davon:
PHP:
<?php
# Sessionmanagement und alles für diesen Thread unwichtige rausgenommen
$file = "demo.exe";
$dlpath = "6kmdkjjsdfi98788nbsdfjn7/";
$mime = array(
'exe' => 'application/octet-stream',
'rar' => 'application/x-rar-compressed',
'zip' => 'application/zip',
);
$extget = explode(".", $file);
$extension = $extget[count($extget)-1];
$sendmime = $mime[$extension];
header ("HTTP/1.1 200 OK");
header("Content-type: $sendmime");
header("Content-Length: ".filesize($dlpath.$file)); // Dateigröße
header("Content-Disposition: attachment; filename=\"$file\"");
readfile_chunked($dlpath.$file);
?>
Zuletzt bearbeitet: