Tobias H.: PHP Skript abarbeiten

Hallo,
ich habe ein PHP Skript, das regelmäßig unmengen an sql-queries nacheinander abarbeitet. allerdings sind es mittlerweile so viele geworden, dass folgender fehler kommt:

"Fatal error: Maximum execution time of 30 seconds exceeded ..."

Was für mich so viel bedeutet wie, dass die max. Zeit für die Ausführung des Skriptes wurde überschritten. Wie kann ich es in PHP realisieren, dass das Programm einfach sequentiell die sql-queries ausführt, ohne dass das skript nach 30 sek. abbricht. (quasi so, wie wenn man nach und nach sehen könnte, wie die sql-queries (wenn man einen textoutput hat) eingefügt werden).

ich würde mich über eine schnelle antwort sehr freuen!

Grüße
Tobi

  1. Hallo Tobias,

    ich habe ein PHP Skript, das regelmäßig unmengen an sql-queries nacheinander abarbeitet.

    in welchem Umfeld läuft dieses Skript? Welchen Einfluß hast Du auf dieses Umfeld.

    allerdings sind es mittlerweile so viele geworden, dass folgender fehler kommt:
    "Fatal error: Maximum execution time of 30 seconds exceeded ..."

    30 Sekunden sind PHP-Standard.

    Lösungsansätze:
    a) Erhöhe diese Zeit, z.B. über die Einstellung in der Datei php.ini.
    b) Teile das Skript in Teilskripte auf, die Du der Reihe nach ausführst.
    c) Führe das Skript über die Kommandozeile aus
    d) Nimm einen anderen Ansatz.

    Freundliche Grüße

    Vinzenz

    1. hey vinzent,
      wie kann ich denn das skript via kommandozeile ausführen?

      liebe grüße und danke für die bisherige hilfe!

      tobi

      1. Hi,

        wie kann ich denn das skript via kommandozeile ausführen?

        http://www.php.net/manual/en/features.commandline.php

        MfG ChrisB

  2. Je nachdem wie viele Rechte du für deinen Server hast, kannst du in der php.ini den Parameter 'max_execution_time' anpassen.
    Eventuell ist das auch zur Laufzeit über:

    ini_set('max_execution_time', integer );

    ändern. 'integer' ist dabei durch die jeweilige maximale Laufzeit in Sekunden auszutauschen, also beispielsweise durch 600 für 10 Minuten Laufzeit. Wenn es dein Server zulässt, wie gesagt.

    Eine andere Möglichkeit wäre, deine Abfrage zu stückeln. Du sendest 50 Querys und überführst dann per 'echo' per z.B. JavaScript auf die selbe (dynamische) Seite weiter und hinterlässt eben Information, an welcher Stelle weiter zu arbeiten ist. Ggf. musst du für deaktiviertes JavaScript auch einen "manuellen" Link anbieten. Würde so aussehen:

    <script type="text/javascript">
    <![CDATA[
    document.location.href='http://www.seite.de/?routine=2';
    ]]!>
    </script>

    Ob die bisherige Laufzeit durch eine mit PHP gesetzte Weiterleitung zurück gesetzt wird, weiß ich nicht, aber es hindert dich ja nichts daran, das auszuprobieren [header("Location: http://www.seite.de/?routine=12")] Ich vermute allerdings, die Antwort lautet nein. Wäre aber die schönste Möglichkeit.

    Notfalls wäre auch die Ausgabe eines html-Weiterleitungsheaders eine Variante:

    <meta http-equiv="refresh" content="0; URL=http://seite.de?routine=2">

    1. Hallo Rafael und tobias

      Ob die bisherige Laufzeit durch eine mit PHP gesetzte Weiterleitung zurück gesetzt wird, weiß ich nicht, aber es hindert dich ja nichts daran, das auszuprobieren [header("Location: http://www.seite.de/?routine=12")] Ich vermute allerdings, die Antwort lautet nein. Wäre aber die schönste Möglichkeit.

      Du hast bei dieser Variante noch (mindestens) zwei Probleme:

      1. Du kannst vor dem header nichts ausgeben. Falls du nur Datenbank queries abschicken willst macht das vielleicht nicht soviel aus, aber spätestens wenn das Script irgendeine Statusmeldung ausgeben soll, sind die beiden anderen Methoden (Javascript-Weiterleitung oder HTML-Meta Refresh) wohl besser geeignet.

      2. Es kann sein, dass du eine Fehlermeldung mit ungefähr folgenden Inhalt bekommst: "The page isn't redirecting properly" Hatte ich zumindest bei einem Skript schonmal, welches sich immer wieder selbst aufgerufen hat. Obwohl es irgendwann eine Abbruchbedingung gab, kam diese Fehlermeldung. Ich hab es nicht genauer untersucht, kann nur sagen, dass 17 Aufrufe anscheinend noch kein Problem darstellten, während 25 Aufrufe zuviel waren.

      Finde es übrigens total Klasse, dass du dir die Mühe gemacht hast und sogar vier verschiedene Lösungsansätze beschrieben hast!

      liebe grüße mbr