2017-10-05 2 views
0

Ich weiß, dass dieses Thema viele Male behandelt wurde, aber keine der Lösungen auf SO scheint für PHP 7.x zu funktionieren (zum Beispiel alles in close a connection early funktioniert nicht. Das gleiche gilt für alle ähnlichen Antworten zu ähnlichen Fragen).PHP im Hintergrund fortsetzen (nach dem Schließen der Verbindung zum Client) PHP7 (!)

Ich möchte die Verbindung eines PHP-Skripts früh schließen, damit der Browser bei länger laufenden Aufgaben nicht zum Stillstand kommt. Ich habe ein PHP 5.x Server Setup, wo dies seit Jahren wunderbar funktioniert. Aber ich habe Mühe, es auf einem PHP 7.x-Setup arbeiten zu lassen.

Ich kann fastcgi_finish_request() nicht verwenden, da ich PHP mit FastCGI nicht betreibe. Darüber hinaus sind alle kommandozeilenorientierten Lösungen (Exec usw.) keine Option. Threads sind keine Option, da Pthread nicht auf dem Server installiert ist.

Nach langen Tests, fand ich heraus, dass für PHP 5.x, um richtiges Schließen der Verbindung zu erreichen, während weiterhin mit dem Skript verschiedene "Rezepte" abhängig von der Serverkonfiguration benötigt. Wo für einige Server dies den Trick

header("Content-Length: 0"); 
ob_end_clean(); 
ob_end_flush(); 
echo(' '); 

andere Konfigurationen werden nur diese müssen das gleiche erreichen:

header("Content-Encoding: none"); 
header("Content-Length: 0"); 
flush(); 

Mit PHP 7.x, obwohl, ich habe versagt mit dem Recht zu kommen "Rezept".

Jeder da draußen, der mehr Glück hatte oder eine andere Lösung vorschlagen kann?

Antwort

-2

Sie können versuchen, register_shutdown_function(). Rufen Sie diese Funktion einfach auf, wenn Sie die Benutzerverbindung schließen möchten, d. H. Die letzte Anweisung Ihres Codes.

<?php 
function shutdown() 
{ 
    // This is our shutdown function, in 
    // here we can do any last operations 
    // before the script is complete. 

    echo 'Script executed with success', PHP_EOL; 
} 

register_shutdown_function('shutdown'); 
?> 
+0

Das tut nicht den Trick, den ich brauche, um die Verbindung zu schließen und dann tun Hintergrund arbeiten. –

Verwandte Themen