这个问题,搜索一下,不知道有多少种回答,但是很多回答的都不准确,我测试总结一下 首先是都认可的要判断connection_status()或connection_aborted(),但是这两个状态的,必须是向前端发送数据后,才能获得,即无法被动获得,只能主动获得 因此判断客户端是
这个问题,搜索一下,不知道有多少种回答,但是很多回答的都不准确,我测试总结一下
首先是都认可的要判断connection_status()或connection_aborted(),但是这两个状态的值,必须是向前端发送数据后,才能获得,即无法被动获得,只能主动获得
因此判断客户端是否中断的方法也就只能是,后端向前端发送数据后,判断connection_status()或connection_aborted()的返回值
<?php
ignore_user_abort(true); //如果不忽略,那当下面的flush执行后,程序立即退出
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
ob_flush();
flush();
//控制浏览器前端不要缓存结果,每次都要重新查询
$maxvid = $_GET["maxvid"];
error_log(date("[Y-m-d H:i:s]")." > "."maxvid: ".$maxvid."\n", 3 , "/usr/local/apache2219/logs/php_log");
$gmworker = new GearmanWorker();
$gmworker->setTimeout(60000);
$gmworker->addServer();
$gmworker->addFunction("getmsg", "getmsg");
if ( ($gmworker->work()) && ($gmworker->returnCode() == GEARMAN_SUCCESS) )
{
echo $msg;
ob_flush(); //必须有,不然是在PHP_BUFFER不会被发送到客户端,也检查不出是否中断
flush(); //必须设置ignore_user_abort(true),不然程序直接退出了,无法再判断连接状态
if ( connection_status() ) {
error_log(date("[Y-m-d H:i:s]")." < ".$msg.",but connection aborted!\n", 3 , "/usr/local/apache2219/logs/php_log");
} else {
error_log(date("[Y-m-d H:i:s]")." < ".$msg."\n", 3 , "/usr/local/apache2219/logs/php_log");
}
}
function getmsg($job)
{
global $msg;
$msg = $job->workload();
$result = "OK";
return $result;
}
?>
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号