DL Mod v5.1.5 -> Allowed memory size of...
Schau doch mal in die Indianer-Konfig, ob da was "ersichtlich" ist.
Ich weiß, die ist alles andere als einfach zu lesen, aber ich wüsste selber jetzt nicht, an was es liegen könnte.
Meine Tests waren bislang jedenfalls nicht fehlerbehaftet, ich konnte immer Dateien bei mir herunterladen, die auch das PHP-Limit überstiegen...
Ich weiß, die ist alles andere als einfach zu lesen, aber ich wüsste selber jetzt nicht, an was es liegen könnte.
Meine Tests waren bislang jedenfalls nicht fehlerbehaftet, ich konnte immer Dateien bei mir herunterladen, die auch das PHP-Limit überstiegen...
Hi großer Meister! 8)
Nimm's mir bitte nicht übel das ich weiter nerve. :roll:
Nachdem ich nun über Tage das große Netz der Netze durchstöbert habe, bin ich mal wieder der Meinung das es definitiv nicht am Apache liegt. Schau dir bitte mal folgende Seite an, auf der mein Problem beschrieben steht:
http://www.tutorials.de/forum/php/28682 ... dfile.html
Wenn ich das dort geschriebene richtig verstehe, dann ist das "Übel" wohl die Funktion "readfile_chunked".
Bye
Nimm's mir bitte nicht übel das ich weiter nerve. :roll:
Nachdem ich nun über Tage das große Netz der Netze durchstöbert habe, bin ich mal wieder der Meinung das es definitiv nicht am Apache liegt. Schau dir bitte mal folgende Seite an, auf der mein Problem beschrieben steht:
http://www.tutorials.de/forum/php/28682 ... dfile.html
Wenn ich das dort geschriebene richtig verstehe, dann ist das "Übel" wohl die Funktion "readfile_chunked".
Bye
Und wenn Du nun diese Funktion verwendest?
Funktioniert es dann?
Code: Alles auswählen
// Fuktion readfile_chunked();
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;
ob_flush();
flush();
}
return fclose($handle);
}
Hi! 8)
Damit hatte ich schon experimentiert, mit teilweisem Erfolg. Allerdings bin ich auch nicht sicher wie dies dann wirklich auszusehen hat:
Ich habe es aktuell so umgeschrieben:
Damit wird bei der neuen DL Methode jetzt schon mal die Datei nicht mehr kplt. in den Speicher geladen, sondern direkt von der Platte gestreamt, egal wie groß sie ist. Dateien größer "memory_limit" (aktuell 32M) können problemlos dl werden. Allerdings ist das Ergebnis weiterhin eine defekte Datei. Wenn ich mir die Dateien anschaue, dann ist die originale Datei immer kleiner als die Runtergeladene.
Bei der alten DL Methode wird weiterhin alles in den Speicher geladen.
Damit hatte ich schon experimentiert, mit teilweisem Erfolg. Allerdings bin ich auch nicht sicher wie dies dann wirklich auszusehen hat:
Code: Alles auswählen
function readfile_chunked($filename, $retbytes = true)
{
$chunksize = 1048576;
$buffer = '';
$cnt =0;
$handle = fopen($filename, 'rb');
if ($handle === false)
{
return false;
}
while (!feof($handle))
{
$buffer = fread($handle, $chunksize);
echo $buffer;
if ($retbytes)
{
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status)
{
return $cnt;
}
return $status;
}
Code: Alles auswählen
function readfile_chunked($filename, $retbytes = true)
{
$chunksize = 1*(1024*1024);
$buffer = '';
$cnt =0;
$handle = fopen($filename, 'rb');
if ($handle === false)
{
return false;
}
while (!feof($handle))
{
$buffer = fread($handle, $chunksize);
print $buffer;
ob_flush();
flush();
if ($retbytes)
{
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status)
{
return $cnt;
}
return $status;
}
Bei der alten DL Methode wird weiterhin alles in den Speicher geladen.
Dachte ich mir, daß das so nicht geht, da die Ausgabepuffer im Browser als eigene Blöcke angesehen werden und als Ganzes dann defekte Ergebnisse liefern.
Denn: Jeder Block hat einen Header und ggf. auch Footer und das ist gerade bei geteilten grossen Dateien nicht das gelbe vom Ei.
Ich habe daher weiterhin vor, den Zugriff auf die Datei direkt laufen zu lassen, analog externer Downloads.
Wird dann eine weitere Option als DL Methode.
Ich muss dazu nur mal wieder Zeit finden...
Denn: Jeder Block hat einen Header und ggf. auch Footer und das ist gerade bei geteilten grossen Dateien nicht das gelbe vom Ei.
Ich habe daher weiterhin vor, den Zugriff auf die Datei direkt laufen zu lassen, analog externer Downloads.
Wird dann eine weitere Option als DL Methode.
Ich muss dazu nur mal wieder Zeit finden...
Sorry, aber ich könnte ko* und das ganze DL Gedöhns in den Orkus kippen.
Was ist an meinem System so anders, das hier weder die alte noch die neue DL Methode sauber funktioniert? Warum wird selbst bei der alten Methode die ganze Datei in den Speicher geladen bis er platzt?
Du schreibst immer "den Zugriff auf die Datei direkt laufen zu lassen". Darunter verstehe ich (sicher wieder falsch) was anderes, nämlich einen direkten Link. Den sehe ich aber nirgends. :roll:
Was ist an meinem System so anders, das hier weder die alte noch die neue DL Methode sauber funktioniert? Warum wird selbst bei der alten Methode die ganze Datei in den Speicher geladen bis er platzt?
Du schreibst immer "den Zugriff auf die Datei direkt laufen zu lassen". Darunter verstehe ich (sicher wieder falsch) was anderes, nämlich einen direkten Link. Den sehe ich aber nirgends. :roll:
schon klar. Trotzdem muss es doch an irgendetwas in meinem System liegen, denn scheinbar bin ich ja der Einzige mit diesem Problem. Ich habe mittlerweile in diversen Foren und nun auch in einer NG (de.comm.software.webserver) nachgefragt. Als Antwort gab es entweder einen Hinweis auf "PHP Fehler" in der DL Funktion oder Schweigen. Doch es hat doch vor der Umstellung auf den Apache auch bestens funktioniert.
Gute Nachrichten:
Auf OXPUS.de läuft der MOD nun schon mit der neuen DL Methode.
D. h. neu ist sie nicht, es wurde jediglich die Möglichkeit geschaffen, den Direktlink zum Download zu aktivieren, wenn die Datei grösser ist, als das Memory-Limit von PHP.
Damit wird zwar jede Statistik mitgeführt, der Download läuft dann aber per HTTP-Protokoll und nicht mehr über PHP und somit fehlerhaft.
Da ich jetzt noch das Berechtigungssystem etwas erweitern will, was ich hoffentlich morgen schaffe, werde ich den MOD dann veröffentlichen und Du solltest endlich wieder Deine "Monsterdownloads" fehlerfrei herunterladen können.
Ich werde Dir dazu den MOD dann zum Testen geben und wenn alles glatt läuft, also Du dann keine Fehler hast, den MOD der Öffentlichkeit freigeben.
Sofern das okay ist...
Auf OXPUS.de läuft der MOD nun schon mit der neuen DL Methode.
D. h. neu ist sie nicht, es wurde jediglich die Möglichkeit geschaffen, den Direktlink zum Download zu aktivieren, wenn die Datei grösser ist, als das Memory-Limit von PHP.
Damit wird zwar jede Statistik mitgeführt, der Download läuft dann aber per HTTP-Protokoll und nicht mehr über PHP und somit fehlerhaft.
Da ich jetzt noch das Berechtigungssystem etwas erweitern will, was ich hoffentlich morgen schaffe, werde ich den MOD dann veröffentlichen und Du solltest endlich wieder Deine "Monsterdownloads" fehlerfrei herunterladen können.
Ich werde Dir dazu den MOD dann zum Testen geben und wenn alles glatt läuft, also Du dann keine Fehler hast, den MOD der Öffentlichkeit freigeben.
Sofern das okay ist...
Cooooool, es kam gerade an. <riesig freu>oxpus hat geschrieben:So, das Paket ist zu Dir raus.
Sowie die neue Schrankwand steht (spätestens morgen vormittag geht es los. )Sofern Du Zeit hast, teste es aus und poste das Ergebnis hier.
Und ich erst.Ich bin gespannt, ob nun wirklich alles läuft.
Das hat nichts zu sagen. In meiner 4ma bzw. Behörde "zerlege" ich auchandauern deren eingesetzte Programme, nur weil ich sie ausreize... Was bei den Koll. funktioniert tut es bei mir oft nicht mehr.Bei meinen Tests war dem so...