PHP脚本可以在HTTP页面请求结束后继续执行,那在我处理完它后如何最终停止它的执行呢?
此外,是否有事件可以检测操作系统即将强制终止脚本的情况?或者如何设置内部计时器以预测max_execution_time
?
exit()/die() 可以停止 PHP 脚本。
要知道何时停止脚本,您只需使用microtime作为计时器,并将最大执行时间保存为常量(或从 php.ini 文件中获取)。
您还可以查看连接处理信息。在那里我们有像connection_aborted()和connection_status()这样的东西。
但是您试图解决的问题是什么?
register_shutdown_function
函数来注册一个在脚本执行结束时被调用的函数。你可以利用这个函数来检测脚本是否已经终止并执行某些特定的操作。register_shutdown_function(myfunction)
。SIGTERM
事件注册自己的处理程序。(参考链接)
function my_abort_handler( $signo ) {
echo "Aborted";
}
pcntl_signal( SIGTERM, "my_abort_handler" );
你可以开始一个$start=microtime(true)
来获取时间戳。然后你只需要不断检查microtime(true)
并减去你的开始时间,就能得到自执行以来的秒数。
但是,你不能“捕获”脚本因请求时间过长而终止。你可以尝试在关闭处理程序中进行一些最后时刻的操作,但我不确定 PHP 是否会支持这样做。
看起来以前有一个函数connection_timeout()可以实现你所需的功能,但已被废弃和删除。不过并不清楚是否有任何替代品。