关闭浏览器会阻止PHP脚本完成执行吗?

时间:2014-09-05 09:42:48

标签: php html apache

如果向服务器发出ajax请求以在后端运行脚本并且用户关闭了浏览器。如果脚本开始并处于中间进程,那么该脚本是否会在后端完成执行?

2 个答案:

答案 0 :(得分:5)

NO .. ,PHP脚本不会终止执行。

是.. 它将完成执行。

启动php脚本后,它将完成执行,然后停止。

因为,php在服务器端运行,它不会被browser window close这样的客户端简单事件打断。

但是客户端无法看到输出。

代表:

试用此代码:

//File Name: xyz.php
<?php
$fp=fopen("output.txt","w");
$count=0;
for($count=0;1;$count++){
//Infinite loop
fwrite($fp,"".PHP_EOL."".$count."");
}
fclose($fp);
?>

现在测试此文件,即使在关闭浏览器窗口后,它也会继续在该输出文件(output.txt)内打印。

不要忘记关闭来自phpcommand prompt的{​​{1}}脚本,或者它会填满你的硬盘(我只用了10秒钟,其中5秒浏览器关闭,消耗160 MB!)。

以下是结果分析:

  

最初文件大小为:0Kb,

     

五秒钟后:76 MB(浏览器开启至此时)。

     

七秒后:125 Mb(假设浏览器关闭延迟,现在浏览器完全关闭),

     

仍然在10秒后:160 Mb(证明php正在后台运行: - ))

现在我已关闭task manager,现在尺寸不变。

如果您想了解这种情况,请在httpd

之前添加usleep

为:

fwrite()

现在您可以在usleep(1*1000*1000); // Sleep for 1 sec. fwrite($fp,"".PHP_EOL."".$count.""); 文件中看到它发生了。即使你关闭浏览器后。但是由于延迟因素,上面给出的结果分析现在不适用(如果只考虑文件因子的大小),

答案 1 :(得分:1)

好吧,PHP是服务器端,它计算所有代码然后将结果发送到客户端。所以我猜即使你关闭浏览器也会完成脚本执行。