luk: Zwischenstatus einer Schleife ausgeben

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

  1. 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

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. 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

  2. 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.

    1. 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.