update : 2015.11.03
php.shukuma.com검색:
|
접속 다루기PHP는 내부적으로 접속 상태를 관리합니다. 3가지 상태가 존재합니다:
PHP 스크립트가 정상적으로 작동하고 있으면, NORMAL 상태가 활성화됩니다. 원격 클라이언트가 접속을 끊으면 ABORTED 상태 플래그가 켜집니다. 원격 클라이언트의 접속 차단은 보통 사용자가 중지 버튼을 누르는 경우입니다. PHP 내장 시간 제한(set_time_limit())에 걸리면, TIMEOUT 상태 플래그가 켜집니다.
클라이언트 접속 차단으로 인해 스크립트를 중단할 지 여부를 결정할 수
있습니다. 때때로 원격 브라우저가 출력을 받아들이지 않더라도 스크립트가
동작을 마쳐야 할 수 있습니다. 기본 동작은 원격 클라이언트 접속 차단 시에
스크립트를 중단합니다. 이 동작은 php.ini에서 ignore_user_abort 지시어나,
, 아파치 .conf php_value ignore_user_abort 지시어,
ignore_user_abort() 함수로 설정할 수 있습니다. PHP에
사용자 중단을 무시하도록 하지 않고 사용자가 중단하면, 스크립트는
종료됩니다. 한가지 예외는 register_shutdown_function()을
사용하여 종료 함수를 등록했을 경우입니다. 종료 함수가 있으면 사용자가
중단 버튼을 눌렀을 때, 스크립트에서 무언가를 출력하려 해서 PHP가 접속이
중단되었음을 알게 되었을 경우 종료 함수가 호출됩니다. 이 종료 함수는
정상적으로 스크립트 마지막에 종료될 때도 호출되므로, 클라이언트 접속 차단시
다른 동작을 하려면 connection_aborted() 함수를 이용할 수
있습니다. 이 함수는 접속이 취소되었을 때 스크립트는 내장 스크립트 타이머에 의해 종료될 수도 있습니다. 기본 시간 제한은 30초입니다. 이는 php.ini max_execution_time 지시어나, 아파치 .conf php_value max_execution_time 지시어, set_time_limit() 함수로 바꿀 수 있습니다. 타이머가 초과되면 스크립트는 중단되고, 위의 클라이언트 접속 차단의 경우와 마찬가지로 종료함수가 있으면 호출됩니다. 종료 함수에서 connection_status() 함수를 호출하여 시간 초과가 종료 함수 호출을 유발하였는지 확인할 수 있습니다. 이 함수는 시간 초과가 원인으로 종료 함수를 호출하였을 때 2를 반환합니다. ABORTED와 TIMEOUT 상태가 동시에 일어날 수 있는 점에 주의해야 합니다. 이는 PHP에 사용자 중단을 무시하도록 했을 때 일어날 수 있습니다. PHP는 사용자가 접속을 끊었음을 기록하지만, 스크립트는 계속 실행됩니다. 그리고 시간 제한에 도달하여 취소되면 종료 함수가 존재할 경우 호출됩니다. 이 경우 connection_status()가 3을 반환합니다. |