2014-08-30 5 views
2

웹 페이지 교차 도메인의 JSON objectjQuery AJAX으로 전송하는 기본적인 웹 사이트 추적 소프트웨어가 있는데, 데이터는 php 스크립트로 처리됩니다. 이는 window.onbeforeunload에서 트리거됩니다.완료되기를 기다리는 웹 페이지가없는 PHP 스크립트 실행

php 스크립트를 벤치마킹 할 때 다른 도메인의 클라이언트 웹 사이트가 PHP 스크립트가 다음 페이지를로드하기 전에 계속 실행되기를 기다리는 중임을 깨달았습니다. 예를 들어 클라이언트 사이트 방문자는 다른 페이지로 이동합니다. 처리하기 위해 서버에 도메인을 보냅니다. 내 php 스크립트에 sleep(30);을 추가하면이 php 스크립트가 완료 될 때까지 (30 초 이상) 클라이언트 웹 사이트가 다음 페이지를로드하지 않습니다.

이 스크립트를 실행 한 후에 값을 반환 할 필요가 없으므로이 php 스크립트가 클라이언트 사이트에 영향을주지 않고 실행되도록하려면 어떻게해야합니까?

나는 내가 충분히 자신을 설명했기를 바랍니다. 감사하지 않은 질문이 있으시면 고맙습니다.

해결책 :

이 나를 위해 일한 것입니다 (http://php.net/manual/en/features.connection-handling.php#93441) :

ob_end_clean(); 
header("Connection: close\r\n"); 
header("Content-Encoding: none\r\n"); 
ignore_user_abort(true); // optional 
ob_start(); 
echo ('Text user will see'); 
$size = ob_get_length(); 
header("Content-Length: $size"); 
ob_end_flush();  // Strange behaviour, will not work 
flush();   // Unless both are called ! 
ob_end_clean(); 

//do processing here 
sleep(5); 

echo('Text user will never see'); 
//do some processing 
PHP-FPM에 대한

답변

1
  • :

    는 클라이언트와의 연결을 닫으려면 (응답을 전송) ,하지만 계속 스크립트를 실행하고 일부 데이터를 처리,이 기능은 당신을 도울 수 - fastcgi_finish_request

    아파치를 들어
  • :

    은이 링크를 참조 - close a connection early

+1

감사합니다, 나는이 좋은 해결책처럼 보이는 이해하는 것과합니다. 그러나 오류가 발생했습니다 :'정의되지 않은 함수 fastcgi_finish_request() 호출. 왜 그런가? 감사. –

+2

아마도 당신은 nginx + fpm 대신 apache를 사용하고 있습니다.이 기능은 fpm에서만 작동합니다. – Casey

+2

아마 이것은 유용합니다 : http://stackoverflow.com/questions/138374/close-a-connection-early –

관련 문제