当客户端断开连接时,PHP脚本是否会中止?

时间:2014-12-23 09:31:56

标签: php readfile fread seek

我开发了一个网络应用内容平台,允许用户搜索和下载(大)视频文件。他们还可以直接在浏览器中查看文件。要进行一些访问管理,我不是直接将它们指向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()函数检查连接是否处于活动状态,如果不是这种情况则中止脚本(我猜)。

1 个答案:

答案 0 :(得分:0)

来自documentation

  

PHP不会检测到用户已中止连接,直到   尝试向客户端发送信息。只需使用一个   echo语句不保证信息的发送,请参阅   齐平()。

所以我想说,一旦用户中止,你就打电话给这两行:

ob_flush();
flush();

脚本将停止。我不认为这部分会被执行:

if (connection_status()!=0) 
{
    @fclose($file);
    exit;
}
你检查过吗?有没有理由,为什么你可以认为它不是?

如果您无法查看当前进程(共享主机),您可以简单地编写日志文件进行确认