当一个长时间运行的服务器端脚本,客户关闭浏览器,服务器脚本会强制被停止执行么?

比如:在作大量数据备份的时候,或者10000000次循环的时候;

如果被强制执行,数据破坏或丢失怎么办?

另外,有时候我就想为了减少服务器资源占用,当客户关闭浏览器的时候就停止没运行完的服务器脚本,怎么作?
---------------------------------------------------------------

"当浏览器请求的页面还没运算完成的时候,就关闭了浏览器"
此时程序会终止,php会感知连接中断

1   
2while(!connection_aborted()) {   
3$fp = fopen("状态.txt","w");   
4fwrite($fp,"连接中断".time());   
5fclose($fp);   
6}   

相关的说明见手册
章 21. 连接处理
注: 以下内容对 PHP 3.0.7 及更高版本适用。

在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

0 - NORMAL(正常)

1 - ABORTED(退出)

2 - TIMEOUT(超时)

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限(请参阅 set_time_limit() 函数)时,TIMEOUT 状态的标记将被打开。

您可以决定您的脚本是否需要在客户端中断连接时退出。有时候让您的脚本完整的运行会带来很多方便,即时没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的“php_value ignore_user_abort”以及 ignore_user_abort() 函数来控制。如果您没有告诉 PHP 忽略用户的中断,您的脚本将会被中断,除非您通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭出发函数,当远程用户点击 STOP 按钮后,您的脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

......

Published At
Categories with Web编程
Tagged with
comments powered by Disqus