服务器如何知道我在这样的代码中关闭了浏览器?
<?php
$i = 0;
while (1) {
echo "a";
flush();
$fp = fopen("$i.txt", "w");
fclose($fp);
sleep(1);
$i++;
}
?>
如果我关闭浏览器,脚本将停止,不再创建文件。
答案 0 :(得分:2)
这是因为当您尝试输出某些内容(例如echo "a"; flush();"
)时,PHP会看到请求已中止,因此会停止请求。
快速说明一下。只有在输出某些内容时才会发生这种情况。我猜这是因为PHP主要用于模板,主要用于输出内容。那么,如果内容不会去任何地方,为什么要继续处理脚本?
如果你不想让它停止。执行以下操作之一:
选项A:不输出任何内容。
flush()
和echo
都被视为输出,以及许多其他功能。 PHP仅检查用户在发送内容时是否已中止,因此不输出任何内容将确保不检查。虽然这可能不像......那样可靠。
选项B:使用ignore_user_abort(true)
这将确保即使用户离开页面,脚本也会继续输出。然后,您可以使用connection_aborted()
进行检查,以确定连接是否已中止。