PHP脚本可以continue executing after the HTTP page request,那么当我完成它后,如何最终阻止它执行呢?
此外,是否有事件要检测操作系统何时强制中止脚本?或者如何保留内部计时器以预测max_execution_time
?
答案 0 :(得分:8)
exit()/die()将停止php脚本。
要知道何时停止脚本,您只需使用microtime作为计时器并将其保存为常量(或从php.ini文件中取出)最长执行时间。
您还可以查看Connection handling信息。我们在哪里有connection_aborted()和connection_status()
之类的内容但是你要解决的问题是什么?
答案 1 :(得分:5)
您可以使用register_shutdown_function
注册在脚本执行结束时调用的函数。您可以使用它来检测脚本何时终止并执行某组操作。
答案 2 :(得分:4)
要在请求关闭时进行回叫,请使用register_shutdown_function( myfunction )
。
与大多数POSIX环境非常相似,PHP也支持signal handlers。您可以为SIGTERM
事件注册自己的处理程序。
function my_abort_handler( $signo ) {
echo "Aborted";
}
pcntl_signal( SIGTERM, "my_abort_handler" );
答案 3 :(得分:2)
您可能需要查看允许脚本向自身发送信号的pcntl-alarm。还包含一些关于如何捕获可由OS发送的终止信号的示例。并且确实死了()。
答案 4 :(得分:1)
好吧,你可以启动一个$start=microtime(true)
,它会返回一个时间戳。然后你可以继续检查microtime(true)
并从你的开始时间中减去它,以获得自执行以来的秒数。
但是不,由于请求太长,你无法“捕获”脚本作为终止。你可以尝试在关机处理程序中做最后一分钟的事情,但我不确定PHP是否会尊重它。
看起来曾经有一个功能完全符合您的要求connection_timeout(),但它已被弃用并删除。但是,不知道是否有任何替代品。