一个PHP脚本能否自我中止或检测中止?

10

PHP脚本可以在HTTP页面请求结束后继续执行,那在我处理完它后如何最终停止它的执行呢?

此外,是否有事件可以检测操作系统即将强制终止脚本的情况?或者如何设置内部计时器以预测max_execution_time?

5个回答

7

5
你可以使用register_shutdown_function函数来注册一个在脚本执行结束时被调用的函数。你可以利用这个函数来检测脚本是否已经终止并执行某些特定的操作。

请记住,只有在脚本执行完成时才会调用关闭回调函数。如果用户中断连接,则不会调用该函数。 - Julian F. Weinert

4
要在请求关闭时回调函数,请使用register_shutdown_function(myfunction)
与大多数POSIX环境类似,PHP也支持信号处理程序。您可以为SIGTERM事件注册自己的处理程序。(参考链接)
function my_abort_handler( $signo ) {
   echo "Aborted";
}

pcntl_signal( SIGTERM, "my_abort_handler" );

2

您可能需要查看pcntl-alarm,它允许脚本向自身发送信号。此外,该函数包含一些示例,演示如何捕获操作系统可能发送的kill信号。同时,也确实需要使用die()。


1

你可以开始一个$start=microtime(true)来获取时间戳。然后你只需要不断检查microtime(true)并减去你的开始时间,就能得到自执行以来的秒数。

但是,你不能“捕获”脚本因请求时间过长而终止。你可以尝试在关闭处理程序中进行一些最后时刻的操作,但我不确定 PHP 是否会支持这样做。

看起来以前有一个函数connection_timeout()可以实现你所需的功能,但已被废弃和删除。不过并不清楚是否有任何替代品。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接