Wie wird eine Umleitung ausgelöst, bevor das PHP-Skript beendet wird?

8

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.

%Vor%

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%     
lost baby 08.05.2012, 18:59
quelle

8 Antworten

12

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

umgeleitet wird %Vor%     
Bhavesh Gangani 08.05.2012, 19:09
quelle
5

Ich würde das versuchen:

%Vor%     
Phil W 08.05.2012 19:37
quelle
3

Hier ist der richtige Weg, es zu tun ... Code von Sonia Desbiens, alias: fataqui 07/01/2005

%Vor%     
John 08.11.2012 00:06
quelle
1

Versuchen Sie Content-Length auf 0 zu setzen

    
blockhead 08.05.2012 19:01
quelle
1

Warum verwenden Sie nicht Location anstelle von refresh , um umzuleiten?

    
Musa 08.05.2012 19:21
quelle
1

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 ...

%Vor%     
Alan Hickman - Burr IST 16.10.2012 14:23
quelle
1

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%

Ссылка

    
Doug Cassidy 24.07.2013 19:19
quelle
0

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

    
Localghost 08.05.2012 20:24
quelle

Tags und Links