Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当客户端断开连接时,PHP脚本是否会中止?_Php_Readfile_Fread_Seek - Fatal编程技术网

当客户端断开连接时,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

我开发了一个web应用程序内容平台,允许用户搜索和下载(大)视频文件。他们还可以直接在浏览器中查看文件。为了进行一些访问管理,我没有将它们直接指向mp4/webm文件,而是使用PHP脚本来处理。我的代码主要基于上的示例

片段:

    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