Nina: Script abschicken und weitermachen

Hi,

habe ein Script, dessen Ausgabe ziemlich schnell erfolgt.
Nach der Ausgabe müsste jedoch noch eine längere Prozedur durchgeführt werden.
Habe nun schon ob_end_flush() versucht, sodass die Ausgabe übermittelt wird und der Browser des Besuchers der Seite meint, das Script ist fertig, sodass es in aller Ruhe noch weiterarbeiten kann.
Leider wartet der Browser dennoch, ob noch etwas kommt.
Was könnte ich noch versuchen?

Danke

  1. Hallo Nina,

    Habe nun schon ob_end_flush() versucht, sodass die Ausgabe übermittelt wird und der Browser des Besuchers der Seite meint, das Script ist fertig, sodass es in aller Ruhe noch weiterarbeiten kann.

    Falls du nicht zufällig den Output-Buffer (oder wie auch immer das auf deutsch heißt) angeschaltet hast, willst du nicht ob_end_flush() sondern flush() benutzen.

    Leider wartet der Browser dennoch, ob noch etwas kommt.

    Natürlich. Das Script läuft ja weiter, es könnte auch noch eine Ausgabe kommen (auch ohne dass du das explizit willst, zum Beispiel eine Fehlermeldung)

    Was könnte ich noch versuchen?

    Mit PHP kommst du da wohl nicht weiter. Du könntest irgendwie versuchen, das Script von der Shell aus auszuführen, zum Beispiel mit system('dasscript.php &') oder mit nohup oder per Cronjob.

    Ich würde es aber einfach so lassen, die Seite ist ja fertig aufgebaut. Du solltest dir aber überlegen, ob du die php.ini-Direktive ignore_user_abort setzt, damit das Script nicht abgebrochen wird, wenn der Benutzer auf einen Link klickt.

    Grüße aus Freiburg,
    Marian

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
    1. Hi,

      sollte nicht ob_end_flush() der Anfrage ein Ende setzen?
      ignore_user_abort habe ich schon im Script aktiviert; sonst würde dieses Vorhaben wenig Sinn haben.

      Cu

      1. echo $begrüßung;

        sollte nicht ob_end_flush() der Anfrage ein Ende setzen?

        Nein, es setzt der mit ob_start() gestarteten Zwischenpufferung der Ausgabe ein Ende.

        Ein Webserver hat im Allgemeinen kein Interesse daran, dass die zum Abarbeiten von Requests gestarteten Prozesse nach Beendigung der Abfrage noch weiterleben, braucht er doch die Ressourcen für neue Requests.
        Vermutlich wirst du zur Erfüllung deiner Aufgabenstellung einen neuen Prozess erzeugen müssen, der weiterleben kann, während der Request-Prozess sich beendet und damit den Apachen zufriedenstellt.

        echo "$verabschiedung $name";

  2. Hi,

    Was könnte ich noch versuchen?

    Du mußt einen Content-Length-Header mitschicken, damit der Browser aufhört zu warten, wenn er die entsprechende Anzahl Bytes bekommen hat.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!