Wie kann ich PHP 5.2 (das als apache mod_php läuft) dazu bringen, eine vollständige HTTP-Antwort an den Client zu senden und dann noch eine Minute lang weitere Operationen auszuführen?
Die lange Geschichte:
Ich habe ein PHP-Skript, das einige lange Datenbankabfragen ausführen und E-Mails versenden muss, was 45 bis 60 Sekunden dauert. Dieses Skript wird von einer Anwendung aufgerufen, über die ich keine Kontrolle habe. Ich möchte, dass die Anwendung alle vom PHP-Skript empfangenen Fehlermeldungen meldet (meist Fehler bei ungültigen Parametern).
Die Anwendung hat eine Timeout-Verzögerung von weniger als 45 Sekunden (ich kenne den genauen Wert nicht) und registriert daher jede Ausführung des PHP-Skripts als Fehler. Daher muss PHP die vollständige HTTP-Antwort so schnell wie möglich an den Client senden (idealerweise, sobald die Eingabeparameter validiert wurden) und dann die Datenbank- und E-Mail-Verarbeitung ausführen.
Ich verwende mod_php, also pcntl_fork
ist nicht verfügbar. Ich könnte dieses Problem umgehen, indem ich die zu verarbeitenden Daten in der Datenbank speichere und den eigentlichen Prozess von cron
aber ich suche nach einer kürzeren Lösung.
5 Stimmen
Entschuldigung, aber das sieht nach einem totalen Missbrauch der PHP-Sprache aus.
3 Stimmen
Es handelt sich weniger um einen Missbrauch der PHP-Sprache als um einen Missbrauch eines Webserver-Prozesses. Wenn kein HTTP/Web mehr involviert ist, sollte kein Webserver damit beschäftigt sein.
83 Stimmen
Systemmissbrauch hin oder her, manchmal müssen wir Dinge tun, die wir nicht mögen, weil sie außerhalb unserer Kontrolle liegen. Das macht die Frage nicht ungültig, es macht die Situation nur unglücklich.
15 Stimmen
Ich kann nicht erkennen, inwiefern dies ein Missbrauch sein soll. Wenn das so ist, sollte jemand Amazon auffordern, amazon.com zu schließen, da die meiste Arbeit, die mit dem Verpacken und Versenden einer Bestellung verbunden ist, stattfindet, nachdem die Kaufanforderung im Internet abgeschlossen ist. Entweder das, oder man setzt eine zweiwöchige Frist für amazon.com-Kaufanfragen und liefert die Antwort an den Browser erst dann, wenn die Bestellung an den Kunden ausgeliefert worden ist.
2 Stimmen
Funktioniert diese Lösung? stackoverflow.com/questions/265073/php-background-processes/ ?
27 Stimmen
Wir sollten versuchen, persönliche Meinungen für uns zu behalten. Beantworten Sie bitte die Frage oder gehen Sie woanders hin.