Maximum execution time of 120 seconds exceeded

Support about Download MOD for phpBB 2
Antworten
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Maximum execution time of 120 seconds exceeded

Beitrag von Dungeonwatcher »

'n Abend! :cool:

Unregelmäßig und nicht reproduzierbar taucht ab und zu folgende PHP Fehlermeldung beim downloaden auf:
PHP Fatal error: Maximum execution time of 120 seconds exceeded in ...\dl_mod\classes\class_dlmod.php on line 1470
Das ist die Zeile 19 in dieser Funktion:

Code: Alles auswählen

	// Added by suggestion from Neverbirth. Thx to him!!!
	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);
Ich hatte die 120 Sekunden testweise schon verdoppelt und verdreifacht, ohne Erfolg. :(

Der betroffene User muss sich kplt. aus dem Forum ausloggen, wieder einloggen und dann funktioniert der DL wieder. Was kann die Ursache dafür sein?

Bye
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Es kann auch ein Timeout im Webserver eingestellt sein.
Die Ursachen hierfür sind vielfältig...

Eben der Nachteil, wenn man so riesige Dateien zum Download anbietet :p
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Hm? Ich biete teilweise mehrere 100MB an. Habe diese Fehlermeldung noch nie gesehen!
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

[quote="oxpus";p="87626"]Es kann auch ein Timeout im Webserver eingestellt sein.[/quote]

Hmmm, Timout im Apache? Nicht das ich wüsste.
Die Ursachen hierfür sind vielfältig...
Die einzige Erklärung die ich in der Google Welt dafür finde ist eine zu lange Verarbeitungszeit des Scripts. Nur das kann ich beim besten Willen nicht wirklich glauben.
Eben der Nachteil, wenn man so riesige Dateien zum Download anbietet :p
Was hat denn die Dateigröße damit zu tun? Du sagtest doch selber das (so entsprechend konfiguriert) direkt zur entsprechenden Datei verlinkt ist. Außerdem betrifft es scheinbar wahllos jede Datei, egal wie groß oder klein sie ist. :(
Zuletzt geändert von Dungeonwatcher am Mi 17.Sep, 2008 10:48, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Was hat denn die Dateigröße damit zu tun? Du sagtest doch selber das (so entsprechend konfiguriert) direkt zur entsprechenden Datei verlinkt ist.
1. Wenn die Datei grösser als das PHP-Speicherlimit ist, wird die readfile_chunked-Funktion angesprochen, sofern im MOD eingestellt. Diese liest aber auch die Datei in den Speicher und irgendwann ist der dann eben voll.
2. Du musst das einstellen! In der Konfiguration zur MOD ist dafür der Haken bei "direkt" zu setzen. Mit diesem Haken werden alle Downloads, die über dem PHP-Speicherlimit liegen, direkt verlinkt an den Browser geschickt.
Wenn Du nun allerdings das Speicherlimit so groß gewählt hast, daß damit bereits ein Timeout ausgelöst wird, kann ich auch nichts machen.
Bedenke, daß das Laden einer Datei über die chunked-Funktion Zeit kostet, da häppchenweise abgearbeitet wird. Und Zeit ist ja genau das, was bei Dir nun zu einem Fehler führt ;)

Zur Erklärung:
Die chunked-Funktion liest einen Teil der betreffenden Datei und schickt sie dem User als Download-Teil. Dann der nächste Teil und das bis zum Ende.
Bei Dateien, die damit innerhalb des Timeout-Limits liegen, ist das auch kein Thema, bei wirklich grossen Dateien geht es eben nicht mehr, da der Download dabei immer noch zum PHP-Timeout-Limit zählt. Dann funktioniert wirklich nur noch mit Direktverlinkung!!
Nichts anderes machen auch alle anderen Download-Seiten, wenn extrem grosse Dateien heruntergeladen werden sollen: Sie werden direkt verlinkt an den Browser des Users geschickt, wobei dann kein Script und Timeout mehr stören kann.
Und sobald dann der betreffende Dateityp noch mit einem Programm verknüpft ist (z. B. PDF-Dokumente) kann dann meist auch nur direkt in den PDF-Viewer (z. B. Acrobat Reader) geladen werden. Der einzigste echte Nachteil hierbei.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

[quote="oxpus";p="87629"]1. Wenn die Datei grösser als das PHP-Speicherlimit ist, wird die readfile_chunked-Funktion angesprochen, sofern im MOD eingestellt. Diese liest aber auch die Datei in den Speicher und irgendwann ist der dann eben voll.[/quote]

Klaro, aber warum trifft es dann aber auch Dateien die viel, viel kleiner als das PHP-Speicherlimit sind?
2. Du musst das einstellen! In der Konfiguration zur MOD ist dafür der Haken bei "direkt" zu setzen. Mit diesem Haken werden alle Downloads, die über dem PHP-Speicherlimit liegen, direkt verlinkt an den Browser geschickt.
Jupp, das ist so eingestellt: Neu und direkt
Wenn Du nun allerdings das Speicherlimit so groß gewählt hast, daß damit bereits ein Timeout ausgelöst wird, kann ich auch nichts machen.
Hmmm, das verstehe ich jetzt nicht. Wie soll heierbei ein Timout ausgelöst werden?
Die PHP Limits sehen bei mir so aus:

Code: Alles auswählen

max_execution_time = 120
max_input_time = 90
memory_limit = 50M
Bedenke, daß das Laden einer Datei über die chunked-Funktion Zeit kostet, da häppchenweise abgearbeitet wird. Und Zeit ist ja genau das, was bei Dir nun zu einem Fehler führt ;)
Dann müsste doch eine Erhöhung von max_execution_time zu einer Besserung führen, was es aber nicht tut.
Zur Erklärung:
Die chunked-Funktion liest einen Teil der betreffenden Datei und schickt sie dem User als Download-Teil. Dann der nächste Teil und das bis zum Ende.
Bei Dateien, die damit innerhalb des Timeout-Limits liegen, ist das auch kein Thema, bei wirklich grossen Dateien geht es eben nicht mehr, da der Download dabei immer noch zum PHP-Timeout-Limit zählt. Dann funktioniert wirklich nur noch mit Direktverlinkung!!
Wie schon gesagt, es ist hier egal wie groß die betreffende Datei ist. Die letzte betroffende Datei war z.B. nur 1,3 MB groß.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich sagte doch schon: Es kann viele Ursachen haben und der Webserver kann auch TimeOuts haben.
Lass doch mal die Downloads mit der MOD-Toolbox prüfen, damit die korrekten Dateigrössen eingetragen werden.
Vielleicht ist hier auch was falsch...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten