要实现判断用户已掉线并关闭网页,主要用到方法connection_status 和 connection_aborted。
通过一个例子,来了解下它们的用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <? echo str_repeat( " " ,300); //以下不可省略,否则用户断线,php(线程)立即终止,不会执行" if connection_status()!=0||connection_aborted){" ignore_user_abort( true ); while ( true ) { echo "test<br>/n; //必须有输出, 否则线程会一直执行下去,直到重新启动apche(测试过程2小时),输出也可以写到//注释2处 flush(); if (connection_status()!=0||connection_aborted()){ //用户退出了 } //注释2 sleep(2); //by www.jb200.com } ?> |
下面是另一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <? //检测是否掉线,然后关闭网页 //编辑:www.jb200.com echo str_repeat( " " ,300); ignore_user_abort( true ); //without this, current <a href="http://www.jb200.com/apache/" target="_blank" class="infotextkey">apache</a> thread will terminate Immediately,so the code "if (connection_status()!=0){" will not be executed as the script was broken off! while ( true ) { echo "test<br>/n" ; //if there's no any output, this script will execute endless, which means the current apache thread will not end until you restart apache and connection_status()will keep 0 and connection_aborted() will keep false . flush(); sleep(2); if (connection_status()!=0){ <a href= "http://www.jb200.com/zt/include/" target= "_blank" class= "infotextkey" >include</a> ('dbconnect.inc'); $sql= "delete from online_users where online_user=$user" ; $sql_exec=pg_exec($vChatDB, $sql); die(); //kills the script } } ?> |