Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Timeout nach 300 Sekunden [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Timeout nach 300 Sekunden


 
chefdesigner
20-01-2008, 22:25 
 
N'Abend,

habe ein Problem mit dem Timeout nach 300 Sekunden. Gibt es Möglichkeiten, diesen Timeout mit Hilfe von PHP zu umgehen?
Habe bereits etwas gegoogelt und mein Script wie folgt angepasst:

ini_set("memory_limit","1000M");
ini_set("max_execution_time","9999");
ini_set("max_input_time","9999");
set_time_limit("9999");


Hat im Hinblick auf den Timeout jedoch leider nichts gebracht. Gibt es weitere Möglichkeiten diesen Timeout zu verhindern?

 
combie
20-01-2008, 23:07 
 
Woher weißt du, dass das ein PHP Timeout ist?

 
PHP-Desaster
20-01-2008, 23:08 
 
Wozu benötigst du eine Skriptausführung von 5 Minuten?

 
chefdesigner
20-01-2008, 23:24 
 
@combie: Gute Frage, das weiss ich nicht. Das Script läuft ca. 300 Sekunden und hört dann auf, angezeigt wird mir eine weiße Seite, ohne Erfolgs- und ohne Fehlermeldung.

@PHP-Desaster: Weil ich sehr viele Datensätze miteinander vergleiche und die Ergebnisse in eine Datenbank speichere. Das Abgleichen und die Inserts in die Datenbank sind sehr zeitaufwändig.

 
asp2php
20-01-2008, 23:32 
 
hm ... und das machst du wieviel mal am Tag? Ist es nicht besser auf commandline ebene laufenzulassen?

 
PHP-Desaster
20-01-2008, 23:35 
 
Aja, das wahr die Ähnlichkeits-Geschichte.
Teile den Vergleich auf, so dass nicht alle Datensätze aufmal verglichen werden.

 
chefdesigner
20-01-2008, 23:45 
 
@asp2php: Das Script muss nur bei Bedarf also bei Hinzukommen neuer Modelle laufen. Also vielleicht 2 mal pro Woche, evtl. aber auch täglich. Das mit der Commandline habe ich mir auch schon überlegt, Problem war nur, dass ich nicht rausbekommen habe, wie das funktioniert.

@PHP-Desaster: Genau, die Ähnlichkeits-Geschichte. Das Aufteilen war auch schon mein Gedanke, Problem ist dabei, dass ich noch am überlegen bin, wie ich das am Besten mache. Kann ich auslesen, wann der Timeout eintrifft? Denn irgendwie muss ich ja einschätzen können, wann ich das Script stoppen muss und wo ich dann weiter machen muss.

 
Blackgreetz
21-01-2008, 00:04 
 
Normal müsste man mit einer simplen Ausgabe das Timeout schon überbrücken können, oder? (bin mir nich ganz so sicher)

Dann kannste ja in deine schleife normal ne if-verzweigung machen..

like:

if($anzahl_der_bisher_vergleichten_datensätze % 500 == 0) echo "blubb";

..oder so :)

mfg

 
chefdesigner
21-01-2008, 00:06 
 
@Blackgreetz: Das dachte ich ehrlich gesagt auch. Ich habe das auch schon mit einem echo versucht, allerdings brachte es leider nichts. Ich erhielt trotzdem nach 300 Sekunden eine weiße Seite.

 
chefdesigner
21-01-2008, 16:21 
 
Mal ein ganz anderer Ansatz: Ist es besser den SQL-Insert direkt nach dem Vergleich durchzuführen oder die Punkte und die ID's der beiden Produkte zuerst in einem Array ablegen und das dann hinterher in die Datenbank einlesen?

 
TobiaZ
21-01-2008, 16:24 
 
Hmm, lass mal nachdenken. Ist es besser 100 Queries an die DB zu senden oder nur einen einzigen? :rolleyes:

PS: Maximale länge für Queries beachten.

 
chefdesigner
21-01-2008, 16:33 
 
@Tobiaz: Wie bekomme ich einen Query bei der Anzahl an Datensätzen hin?

Selbst wenn ich erstmal nur die Daten vergleiche ohne einen Query durchzuführen überschreitet das Script den Timeout. Wie bekomm ich denn jetzt raus, woran es genau scheitert, also wo genau der Timeout stattfindet?

Ich habe schon probiert den Timeout mit einem echo nach jeden 100.000 Datensätzen zu unterbinden, war aber leider erfolglos.

 
TobiaZ
21-01-2008, 16:50 
 
@Tobiaz: Wie bekomme ich einen Query bei der Anzahl an Datensätzen hin? Da es sich nur um ein INSERT geht, solltest du einfach mal das SQL-Manual aufschlagen und dir die verschiedenen (!) Syntax für INSERT ansehen.

Wie bekomm ich denn jetzt raus, woran es genau scheitert, also wo genau der Timeout stattfindet? Sicher kennst du flush() noch nicht.

Ich habe schon probiert den Timeout mit einem echo nach jeden 100.000 Datensätzen zu unterbinden, war aber leider erfolglos. Wenn der Timeout wirklich vom Server kommt, hilft das alles imho nichts. Damit kannst du nur dem Browser mitteilen, dass er noch was zu erwarten hat.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:17 Uhr.