我需要精确监控下载的数据量,这是我的测试功能:
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种情况下进行了测试:
前两个方案按预期工作,并且返回的大小对于另一端收到的大小是正确的。
第三个场景让我有些困惑,它确实返回了正确的大小...最终,即使它超过了脚本时间限制,它仍然需要大约一分钟才能到达函数结尾。
如果我删除connection_aborted,它将继续进行到最后,因为即使在另一侧没有人,写入输出流也没有问题。
现在,它仍然可以正常运行,但是在PHP文档中没有提及阻止功能。这是标准行为还是确切发生了什么?