Ich möchte ein PHP-Skript ausführen, das eine Reihe von E-Mails (Newsletter) versendet, aber da es einige Zeit dauern kann, möchte ich den Benutzer sofort auf eine Seite mit einer Nachricht wie "Ihre Newsletter sind Schlange stehen, um ausgesandt zu werden. "
Bisher funktionieren die Header-Weiterleitungen, aber sie verursachen erst nach dem Senden aller E-Mails die Weiterleitung. Kann ich die Verbindung nach dem Senden der Weiterleitung schließen, sodass der Browser sofort auf die Weiterleitung reagiert? Ich habe so etwas probiert.
in verschiedenen Permutationen und Kombinationen, aber ohne Erfolg. Ich vermute, dass es nicht so einfach gemacht werden kann, aber bevor ich anfing, mit Cron-Jobs oder benutzerdefinierten Daemons zu spielen, dachte ich, ich würde mir diesen Ansatz ansehen. Danke
zB wie Blockkopf unten suggeriert, aber kein Glück
%Vor%Wenn Sie das Skript fortlaufend ausführen möchten und dennoch einige Ausgaben anzeigen möchten, verwenden Sie eine Ajax-Anfrage an den Server, die E-Mails in die Warteschlange stellen und den Benutzer weiterhin durch diese Seite browsen lässt.
Wenn Sie dies nicht verwenden möchten; stattdessen könnten Sie verwenden,
Das Skript führt Hintergrund aus, auch wenn der Benutzer zu show_usermessage.php
page
Damit dies auf IIS7 funktioniert, müssen Sie isapi mit responseBufferLimit="0"
in Ihrer web.config und output_buffering = Aus in php.ini verwenden, dann sollte so etwas funktionieren ...
Die akzeptierte Antwort funktionierte nicht für mich, aber das tat es. Bitte beachten Sie, dass ignore_user_abort () in der php.ini
aktiviert sein muss %Vor%Grundsätzlich möchten Sie den Job asynchron ausführen. Ich würde das PHP-Skript einen anderen Thread (oder Prozess) erstellen lassen, der die E-Mails asynchron sendet. Auf diese Weise ist der Thread, in dem die Anfrage ausgeführt wird, nicht an die Verarbeitung der E-Mails gebunden. Der Thread, der die Anforderung verarbeitet und das Ergebnis zurückgibt, kann vollständig unabhängig von dem Thread arbeiten, der die E-Mails sendet.
Dieser Thread scheint diesen Ansatz zu berühren, vielleicht wird er in Bezug auf Implementierungsdetails hilfreicher sein: Run PHP-Aufgabe asynchron