如何确定PHP脚本处于终止阶段?
PHP中是否有任何函数/全局变量返回脚本的当前状态(如runnning,terminating)?
或者是通过使用register_shutdown_function()
来设置此状态的唯一方法?
该功能对我来说看起来不灵活,因为已经注册的关闭功能可以被重写。 关机功能在用户放弃连接时执行,这不是我正在寻找的内容,我不想介绍太多限制。
有没有其他的register_shutdown_function()
可用? 否则,如何处理该功能的缺点?
UPDATE
只是为了澄清:我不是在寻找连接状态(例如connection_aborted()
),而是为PHP脚本的运行状态(运行,终止)。 我已经知道更多关于连接状态的函数,但脚本的当前状态如何? 脚本是否已经被终止,并且因此而销毁对象(将被销毁)?
UPDATE2
为了更清楚地说明,我仍然没有寻找连接状态,而是寻找关于运行状态的可比较事物。 它也应该在CLI中工作,它没有任何连接状态,因为没有与执行代码相关的TCP连接 - 以更好地说明我在找什么。
在阅读了PHP源代码的大部分内容之后,我得出这样的结论:即使这样的状态存在于经验层面,它们在标志或变量形式中并不存在于解释器中。
例如关于抛出异常的代码决定了各种变量是否可能。
因此,问题的答案是否定的。
目前我能找到的最佳解决方法是在注册关闭功能中设置一个全局变量。 但是来自PHP的标志似乎并不真正可用。
<?php
register_shutdown_function(function() {$GLOBALS['shutdown_flag']=1;});
class Test {
public function __destruct() {
isset($GLOBALS['shutdown_flag'])
&& var_dump($GLOBALS['shutdown_flag'])
;
}
}
$test = new Test;
#EOF; Script ends here.
您正在寻找:
Connection_aborted();
http://it.php.net/manual/en/function.connection-aborted.php
要么
Connection_status();
http://it.php.net/manual/en/function.connection-status.php
附录
不能有任何终止状态,因为如果它终止了,你不能检查它的状态lol
我从来没有做过(实际)使用它,但你可能能够使用:
http://www.php.net/manual/en/function.register-tick-function.php
这意味着你可以在脚本运行时编写一个文件或者更新一个db或者其他东西......例如,将一个记录会话/某个id和一个timestamp id写入一个文件或者某个东西,然后检查执行之间的时间,也许你会说if它在X秒内还没有更新,它仍在运行。
但正如所述,PHP是无状态的,因此PHP不会认识到这一点。
如果做不到这一点,你可以在脚本开始时/在“结束”之前以某种方式设置一个数据库字段,但是会产生很多开销。
链接地址: http://www.djcxy.com/p/7357.html上一篇: How to determine that a PHP script is in termination phase?