2017-10-05 2 views
0

이 주제가 여러 번 다루어졌지만 알고있는 솔루션이 PHP 7.x에서 작동하지 않는 것 같습니다 (예 : close a connection early 유사한 질문에 대한 비슷한 답변을 모두 표시하는 경우에도 동일하게 적용됩니다).백그라운드에서 PHP를 계속 진행하십시오. (클라이언트와의 연결을 닫은 후) PHP7 (!)

PHP 스크립트의 연결을 일찍 닫으므로 브라우저가 더 오래 실행되는 작업에서 멈추지 않습니다. 나는 PHP 5.x 서버 설정을 가지고 있는데, 이것은 수년간 훌륭하게 작동한다. 그러나 나는 PHP 7.x 설정에서 작동하도록 고심하고있다.

FastCGI와 함께 PHP를 실행하지 않기 때문에 fastcgi_finish_request()를 사용할 수 없습니다. 또한 명령 행 지향 솔루션 (exec 등)은 옵션이 아닙니다. 또한 pthread가 서버에 설치되어 있지 않기 때문에 스레드는 옵션이 아닙니다.

오래 동안 테스트 한 결과, PHP 5.x의 경우 스크립트를 계속 사용하면서 서버 구성에 따라 다른 "래서 피"가 필요하다는 것을 알았습니다. 일부 서버에 대한이 트릭을 않는 경우

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

다른 구성은 동일을 달성하기 위해이 필요합니다 : PHP 7.x의와

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

하지만, 나는 오른쪽을 마련하지 못했다 "레시피".

더 많은 행운이 있었거나 다른 해결책을 제안 할 수있는 사람이 있습니까?

답변

-2

register_shutdown_function()을 시도해 볼 수 있습니다. 사용자 연결 (예 : 코드의 마지막 문)을 닫을 때이 함수를 호출하면됩니다.

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

연결을 닫고 배경 작업을 수행하는 데 필요한 트릭이 아닙니다. –

관련 문제