Zwischenstatus einer Schleife ausgeben
luk
- php
Hi,
ich will mit PHP per cURL den Quellcode von circa 130 Seiten herunterladen und diesen dann in eine Datenbank eintragen. Brauche das hauptsächlich um nachher einige meiner RegularExpressions auf Herz und Nieren testen zu können.
Habe es jetzt mal mit 3 Seiten auf einen Schwung getestet, klappt wunderbar, dauert aber doch ein paar Sekunden (mache das von meinem localhost aus - Internet nicht so schnell heute).
Bevor ich jetzt meinen Script aber auf alle 130 Seiten losschicke, würde ich gerne vorher folgendes machen:
In der Schleife gibt es eine ID, die sich nach jedem Durchgang erhöht. Ist es möglich diese Schrittweise ausgeben zu lassen und nicht erst ganz zum Schluss, wenn alles schon fertig ist? Damit ich immer weiß, wie viel Seiten noch durchgegangen werden müssen?
Und noch eine Frage: Gibt es bei Apache Servern einen Timeout, nachdem ein PHP Script abgebrochen wird wenn er zu lange dauert? Wie kann ich so etwas unterbinden?
Danke für eure Hilfe,
luk
Hello,
In der Schleife gibt es eine ID, die sich nach jedem Durchgang erhöht. Ist es möglich diese Schrittweise ausgeben zu lassen und nicht erst ganz zum Schluss, wenn alles schon fertig ist? Damit ich immer weiß, wie viel Seiten noch durchgegangen werden müssen?
Die schrittweise Ausgabe ist bei HTTP sehr unsicher. Wenn dein Webserver da mitspielt, könnten auch in der Übertragungsstrecke noch Proxies sitzen, die erst sammeln und dann erst komplett bei Schließung der Connection weiterleiten.
Besser, die ID in eine Datei zu schreiben und diese dann (von einer weiteren Seite) mittels JavaScript (AJAX) alle paar Sekunden abzufragen.
Und noch eine Frage: Gibt es bei Apache Servern einen Timeout, nachdem ein PHP Script abgebrochen wird wenn er zu lange dauert? Wie kann ich so etwas unterbinden?
siehe http://de2.php.net/manual/en/function.set-time-limit.php
aber auch
http://de2.php.net/manual/en/function.ignore-user-abort.php
und
http://de2.php.net/manual/en/function.connection-aborted.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Besser, die ID in eine Datei zu schreiben und diese dann (von einer weiteren Seite) mittels JavaScript (AJAX) alle paar Sekunden abzufragen.
Die Idee find ich klasse, so werd ichs machen!
Danke,
luk
In der Schleife gibt es eine ID, die sich nach jedem Durchgang erhöht. Ist es möglich diese Schrittweise ausgeben zu lassen und nicht erst ganz zum Schluss, wenn alles schon fertig ist?
Wenn du das Script per Kommandozeile startest, sollte das mit den normalen Ausgabebefehlen gehen.
Und noch eine Frage: Gibt es bei Apache Servern einen Timeout, nachdem ein PHP Script abgebrochen wird wenn er zu lange dauert? Wie kann ich so etwas unterbinden?
Nachdem es dein eigener Server ist sollte das gehen.
Google sagt mir ziemlich schnell: max_execution_time in the php.ini file.
Tach!
Ergänzend:
Ist es möglich diese Schrittweise ausgeben zu lassen und nicht erst ganz zum Schluss, wenn alles schon fertig ist?
Wenn du das Script per Kommandozeile startest, sollte das mit den normalen Ausgabebefehlen gehen.
Bei Web-Requests kann man sich vom Webserver mit flush() wünschen, dass er den Ausgabepuffer in Richtung Client leert. Ob er dem Wunsch nachkommt, und ob auch der Browser gewillt ist, sofort zu rendern steht auf einem anderen Blatt.
Google sagt mir ziemlich schnell: max_execution_time in the php.ini file.
An der Kommandozeile ist max_execution_time per Default auf 0 eingestellt.
dedlfix.