gpt4 book ai didi

PHP 脚本不会在浏览器退出时退出

转载 作者:可可西里 更新时间:2023-11-01 13:15:23 26 4
gpt4 key购买 nike

如果客户端关闭浏览器(因此与服务器的连接),为什么这个虚拟脚本会继续运行事件?

while ( true ){    sleep( 1 );    file_put_contents( '/tmp/foo' , "I'm alive ".getmypid()."\n" , FILE_APPEND );}

根据 this 这对我来说是出乎意料的.还有 this示例似乎不起作用。

set_time_limit使用非零参数什么都不做。

我想要一些说明。

最佳答案

如果您尝试在该循环中向浏览器写入一些输出,您会发现如果连接已终止,脚本将中止。 ignore_user_abort 的文档中暗示了此行为

When running PHP as a command line script, and the script's tty goes away without the script being terminated then the script will die the next time it tries to write anything, unless value is set to TRUE

我自己尝试了一些实验,发现即使您确实尝试了一些浏览器输出,如果输出缓冲区尚未满,脚本也会继续运行。如果关闭输出缓冲,脚本将在尝试输出时中止。这是有道理的 - SAPI 层在尝试传输输出时应该注意到请求已终止。

这是一个例子...

//ensure we're  not ignoring aborts..
ignore_user_abort(false);

//find out how big the output buffer is
$buffersize=max(1, ini_get('output_buffering'));


while (true)
{
sleep( 1 );

//ensure we fill the output buffer - if the user has aborted, then the script
//will get aborted here
echo str_repeat('*', $buffersize)."\n";

file_put_contents( '/tmp/foo' , "I'm alive ".getmypid()."\n" , FILE_APPEND );
}

这演示了触发中止的原因。如果您的脚本容易进入无输出的无限循环,您可以使用 connection_aborted()测试连接是否仍然打开。

关于PHP 脚本不会在浏览器退出时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6698820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com