Frage

ich konfigurieren mein Skript zunächst auch nach der HTTP-Anforderung ist über

laufen
 ignore_user_abort(true);

dann Text auszuspülen.

 echo "Thats all folks!";
 flush();

Nun, wie kann ich den Browser Trick zu denken, die HTTP-Anforderung ist vorbei? so kann ich meine eigene Arbeit ohne den Browser zeigt „Laden der Seite“ weiterhin tun.

 header(??) // something like this?
War es hilfreich?

Lösung

Hier ist, wie es zu tun. Sie sagen dem Browser in den ersten N Zeichen der Ausgabe zu lesen und dann die Verbindung schließen, während das Skript ausgeführt hält, bis es fertig ist.

<?php
ob_end_clean();
header("Connection: close");
ignore_user_abort(true); // optional
ob_start();
echo ('Text the user will see');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();     // Will not work
flush();            // Unless both are called !

// At this point, the browser has closed connection to the web server

// Do processing here
echo('Text user will never see');
?>

Andere Tipps

Headers wird nicht funktionieren (sie sind Header, so kommen sie erste )

Ich weiß nicht, von irgendeiner Weise der HTTP-Verbindung zu schließen, ohne das Skript beendet wird, obwohl ich es nehme ist etwas obskure Art und Weise tun.

sagen uns, was Sie tun wollen, nachdem die Anforderung uns bessere Vorschläge geben würde helfen, durchgeführt wird.

Aber im Allgemeinen, würde ich über eine der folgenden Möglichkeiten denken:

1) Führen Sie einige einfache Befehlszeilenskript (exec ()), die wie folgt aussieht:

#!/bin/sh
php myscript.php <arg1> <arg2> .. <argN> &

Dann, dass von Ihrem http gebundenen Skript kick off wie:

<?PHP
exec('/path/to/my/script.sh');
?>

Oder:

Schreiben

2) ein anderes Programm (möglicherweise einen kontinuierlich laufenden Daemon, oder einfach nur ein Skript, das jemals so oft cronned ist), und herauszufinden, wie Ihr in-Anforderungscode ihm Anweisungen passieren kann. Sie könnten eine Datenbanktabelle, die Arbeitswarteschlangen, oder versuchen Sie es mit einer flachen Datei von einer Art zu arbeiten. Sie können auch Ihren Web-basierten Skriptaufruf eine Befehlszeile, die Ihren Out-of-Anfrage verursacht Skript einige Arbeit in der Warteschlange.

Am Ende des Tages, die Sie nicht will Ihr Skript nach der HTTP-Anforderung der Ausführung zu halten. Angenommen, Sie mod_php verwenden, das bedeutet, dass Sie einen Apache-Prozess binden werden, bis das Skript beendet wird.

scroll top