不确定PHP时connection_aborted是否会阻止执行?

时间:2019-01-29 05:13:35

标签: php

我需要精确监控下载的数据量,这是我的测试功能:

function reply_file($path) {
    reply_file_headers($path);
    $size = 0;
    $in = fopen($path, "r");
    $out = fopen("php://output", "w");
    while (!feof($in) && !connection_aborted()) {
        $buffer = fread($in, 16 * 1024);
        fwrite($out, $buffer);
        $size += strlen($buffer);
    }
    fclose($out);
    fclose($in);
    return $size;
}

我在3种情况下进行了测试:

  1. 我让下载完成
  2. 我取消了下载客户端
  3. 我实际上禁用了连接

前两个方案按预期工作,并且返回的大小对于另一端收到的大小是正确的。

第三个场景让我有些困惑,它确实返回了正确的大小...最终,即使它超过了脚本时间限制,它仍然需要大约一分钟才能到达函数结尾。

如果我删除connection_aborted,它将继续进行到最后,因为即使在另一侧没有人,写入输出流也没有问题。

现在,它仍然可以正常运行,但是在PHP文档中没有提及阻止功能。这是标准行为还是确切发生了什么?

0 个答案:

没有答案