我开发了一个网络应用内容平台,允许用户搜索和下载(大)视频文件。他们还可以直接在浏览器中查看文件。要进行一些访问管理,我不是直接将它们指向mp4 / webm文件,而是使用PHP脚本来处理它。我的代码主要基于http://www.media-division.com/php-download-script-with-resume-option/
上的示例段:
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处于禁用状态,我没有在配置中启用此功能。但是行connection_status()函数检查连接是否处于活动状态,如果不是这种情况则中止脚本(我猜)。
答案 0 :(得分:0)
PHP不会检测到用户已中止连接,直到 尝试向客户端发送信息。只需使用一个 echo语句不保证信息的发送,请参阅 齐平()。
所以我想说,一旦用户中止,你就打电话给这两行:
ob_flush();
flush();
脚本将停止。我不认为这部分会被执行:
if (connection_status()!=0)
{
@fclose($file);
exit;
}
你检查过吗?有没有理由,为什么你可以认为它不是?
如果您无法查看当前进程(共享主机),您可以简单地编写日志文件进行确认