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连接 - 更好地说明我正在寻找的东西。
答案 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是无国籍的。