2012-08-09 2 views
0

연결이 중단되었지만 connection_status() 함수가 올바르게 작동하지 않으면 세션에 값을 표시하려고합니다! 문 잠시없이PHP connection_status가 올바르게 작동하지 않습니다.

1 : 여기 아래 코드

session_start(); 
ignore_user_abort(true); 
ob_end_clean(); 
echo "Testing connection handling"; 

while (1) { 
if (connection_status() != CONNECTION_NORMAL){ 
    $_SESSION['conn']='failed';  //worked at some time 
    break; 
} 
sleep(1); 
echo "test"; 
flush(); 
} 

나는이 코드를 테스트, 내가 연결을 수동으로 abord :

session_start(); 
ignore_user_abort(true); 
ob_end_clean(); 

echo 'Testing'; //test if it has output to the browser 
flush(); 
sleep(7); 
echo "test"; 
flush(); 
if (connection_status() != CONNECTION_NORMAL){ 
    $_SESSION['conn']='failed';  //never called 
} 

2 문 동안 WITH 코드 실행이 끝나기 전에 하지만 첫 번째 코드는 작동하지 않습니다. m excepted(do not mark assign 'failed' to the session) , and the second code works. Why the first dosen t?!

답변

0

이것이 작동하는 이유는 while입니다.

잠시 생각해보십시오. 이 PHP 페이지를 처음 실행하면 연결이 잘못되지 않지만 브라우저가 오래되어서 서버에서 연결이 끊어져 (gced 어쩌면) 연결이 오류로 분류되어 코드가 작동합니다.

마찬가지로 연결을 확인하기 위해 루프를 수행하기 때문에 작동합니다.

솔직히 말해서 나는 서버와 클라이언트간에 이러한 무결성을 만들려고 노력하는 이유가 무엇인지 확신 할 수 없지만, 이것은 최상으로 신뢰할 수 없습니다. 인터넷이 어떻게 작동하는지에 대한 근본적인 결함 인 것 같습니다.

+0

@TommasYuan 여전히 응답을 받거나받지 못한다는 것을 이해하지 못합니다. 응답 (메시지)을 받으면 저장하고 안전하게 할 수 있습니다. 스크립트가 끝날 때까지 PHP는 계속 실행될 것이며 클라이언트와 제 시간에 끝나지 않을 것입니다. – Sammaye

+0

첫 번째 코드로 테스트 할 때 수동으로 7 초 이내에 연결을 중단하고 첫 번째 'Testing'이 브라우저로 플러시되었지만 connection_status()가 여전히 0을 반환합니다 (NOMAIL_CONNECTION) –

+0

@TommasYuan 실제로 이것이 PHP에서 시간 간격 때문에 연결을 중단 한 후에도 서버는 풀에서 연결을 제거하기 전에 약 5 분 정도 기다립니다. – Sammaye

관련 문제