如何确定PHP脚本处于终止阶段?

时间:2011-06-03 13:20:42

标签: php interpreter shutdown

PHP中是否有任何函数/全局变量返回脚本的当前状态(如runnning,terminating)?

或者是使用register_shutdown_function()来设置此状态的唯一方法吗?

该功能对我来说看起来不灵活,因为已经注册的关机功能可以用它覆盖。 shutdown function gets executed when a user aborts the connection,这不是我正在寻找的,我不想引入太多限制。

register_shutdown_function()有替代品吗?或者如果没有,如何处理该功能的缺点?

更新

只是为了澄清:我不是在寻找连接状态(例如connection_aborted()),而是寻找PHP脚本的运行状态(运行,终止)。函数以了解有关我已经知道的连接状态的更多信息,但是脚本的当前状态如何?脚本是否已经终止并且是因为它而被销毁的对象?

UPDATE2

为了更清楚地说明,我仍然没有寻找connection state 而是以寻找与运行状态相当的东西。它应该在CLI中工作,它没有任何连接状态,因为没有与执行代码相关的TCP连接 - 更好地说明我正在寻找的东西。

4 个答案:

答案 0 :(得分:4)

在阅读了大部分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.

答案 1 :(得分:0)

您正在寻找:

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

答案 2 :(得分:0)

我自己从未做过(实际)使用它,但你可以使用:

http://www.php.net/manual/en/function.register-tick-function.php

使用这意味着您可以在脚本运行时编写文件或更新数据库等...即将记录会话/某个ID和时间戳ID写入文件或其他内容并检查执行之间的时间或许,您可以说如果它在X秒内没有更新它仍在运行。

但如上所述,PHP是无状态的,因此PHP不会注意这一点。

如果失败了,您可以在脚本启动时/在“结束”之前以某种方式设置数据库字段,但实际上会产生大量开销。

答案 3 :(得分:-1)

  

是否有任何功能/全局   PHP中的变量返回   脚本的当前状态(某事   比如跑步,终止)?

不,PHP是无国籍的。