에서 중단 : http://www.php.net/manual/en/features.connection-handling.php http://www.php.net/manual/en/function.register-shutdown-function.phpPHP가 검색하지 않는 연결은 내가 읽고 깊이 이러한 이해 한 모든
을하지만, 내가 거기에 설명 된대로 작동하지 않는 PHP 5.1.6 및 5.3과 일 모두를 테스트했습니다. 내가 관찰 한 것은 다음과 같다 :
- connection_status()는 클라이언트가 연결을 닫은 후에도 항상 true를 반환한다.
- ignore_user_abort가 0 인 경우에도 클라이언트가 연결을 닫은 후에도 스크립트 실행이 계속됩니다.
- register_shutdown_function()으로 등록 된 함수는 스크립트가 끝날 때까지 실행되지 않습니다. 클라이언트가 연결을 중단하면 스크립트가 중단되지 않습니다 (따라서 함수가 호출되지 않습니다).
기본적으로 PHP는 클라이언트의 연결 끊김을 모두 감지하지 않습니다.
ignore_user_abort가 1로 설정된 것과 같지 않습니다.이 경우 스크립트가 계속 실행되고 종료 될 때까지 shutdown 함수가 호출되지 않더라도 connection_status()는 1을 반환합니다. 그건 사실이 아니야.
ini_get ("ignore_user_abort")는 예상대로 0을 반환합니다.
이것은 PHP의 버그입니까? 아니면 아파치 설정에 의한 것일 수 있습니까?
위의 설명서에서 설명한대로 PHP를 작동 시키려면 어떻게합니까?
테스트 스크립트 :
<?php
function myShutdown() {
error_log("myShutdown ".connection_status()." ".ini_get("ignore_user_abort"));
}
register_shutdown_function(myShutdown);
echo "Hi!";
error_log(" *** test/test *** ");
for ($i=0; $i<10; $i++) {
sleep(1);
error_log(".");
echo ".";
}
?>
단계 재현 : 를 - 스크립트 의 URL을 방문 - 십초이 경과하기 전에 클라이언트의 연결을 중단
(예 : 브라우저에서 정지 버튼을 누르십시오)예상/원하는 동작 : 로그 미만 10 점을 표시해야하고, 결국 "myShutdown 1 0"에서 (실시간으로 로그를 볼 경우 myShutDown 즉시 나타납니다 때 클라이언트의 연결을 끊)
관찰 된/현재 동작 : 로그는 항상 정확히 10 도트를 표시하고 끝에 "myShutdown 0 0"을 표시합니다 (실시간으로 볼 경우 클라이언트가 연결을 끊어도 상관없이 10 초 동안 계속됩니다).
왜 'PHP'버전을 더 이상 지원하지 않습니까? – Baba
PHP를 아파치 모듈로 실행하고 있습니까? – hek2mgl
@ hek2mgl 예, 아파치 모듈로 – matteo