当客户端断开连接时,PHP脚本是否会中止?
我开发了一个web应用程序内容平台,允许用户搜索和下载(大)视频文件。他们还可以直接在浏览器中查看文件。为了进行一些访问管理,我没有将它们直接指向mp4/webm文件,而是使用PHP脚本来处理。我的代码主要基于上的示例 片段:当客户端断开连接时,PHP脚本是否会中止?,php,readfile,fread,seek,Php,Readfile,Fread,Seek,我开发了一个web应用程序内容平台,允许用户搜索和下载(大)视频文件。他们还可以直接在浏览器中查看文件。为了进行一些访问管理,我没有将它们直接指向mp4/webm文件,而是使用PHP脚本来处理。我的代码主要基于上的示例 片段: set_time_limit(0); fseek($file, $seek_start); while(!feof($file)) { print(@fread($file, 1024*8)); ob_f
set_time_limit(0);
fseek($file, $seek_start);
while(!feof($file))
{
print(@fread($file, 1024*8));
ob_flush();
flush();
if (connection_status()!=0)
{
@fclose($file);
exit;
}
}
它基本上将执行时间设置为无限(大文件),按顺序读取文件并将其推送到客户端。我的问题是:当客户端中止下载时,脚本是否会中止?例如,当使用HTML5视频播放器播放视频时,停止观看
默认情况下,ignore_user_abort处于禁用状态,我在配置中未启用此功能。但是line connection_status()函数检查连接是否处于活动状态,如果不是这样(我猜是这样),则中止脚本。来自:
PHP不会检测到用户已中止连接,直到
试图向客户端发送信息。简单地使用
echo语句不保证发送信息,请参阅
刷新()
所以我会说,一旦用户中止,你就调用这两行:
ob_flush();
flush();
脚本将停止。我认为这一部分不会被执行:
if (connection_status()!=0)
{
@fclose($file);
exit;
}
你检查过了吗?有没有一个原因,为什么你可以假设它不是
如果看不到当前进程(共享主机),您可以简单地编写一个日志文件进行确认。请阅读:这与PHP无关,而与调用PHP的方式有关(在您的情况下,可能是Web服务器)。PHP本身可以运行数小时而没有任何问题。RTFM:您应该将此作为一个答案并接受它。您可以通过ajax ping用户,如果没有响应,则设置connection_status=0