10

PHP 脚本可以在 HTTP 页面请求之后继续执行,那么当我完成后如何最终停止它执行呢?

此外,是否有事件可以检测操作系统何时强制中止脚本?或者我如何保持一个内部计时器来预测max_execution_time

4

5 回答 5

7

exit()/die()将停止一个 php 脚本。

要知道何时停止脚本,您只需使用microtime作为计时器并将最大执行时间保存为常量(或从 php.ini 文件中获取)。

您还可以查看连接处理信息。我们有connection_aborted()connection_status()之类的东西

但是您要解决的问题是什么?

于 2009-09-15T17:25:46.290 回答
5

您可以使用register_shutdown_function来注册要在脚本执行结束时调用的函数。您可以使用它来检测脚本何时终止并执行一组特定操作。

于 2009-09-15T17:33:56.757 回答
4

要在您的请求关闭时进行回调,请使用register_shutdown_function( myfunction ).

与大多数 POSIX 环境一样,PHP 也支持信号处理程序SIGTERM您可以为事件注册自己的处理程序。

function my_abort_handler( $signo ) {
   echo "Aborted";
}

pcntl_signal( SIGTERM, "my_abort_handler" );
于 2009-09-15T18:05:20.983 回答
2

您可能想查看pcntl-alarm,它允许脚本向自身发送信号。还包含一些关于如何捕获可由操作系统发送的终止信号的示例。die() 确实如此。

于 2009-09-15T17:29:56.687 回答
1

好吧,你可以启动一个$start=microtime(true)返回时间戳的方法。然后你可以继续检查microtime(true)并从你的开始时间中减去它,以获得自执行以来的秒数。

但是不,由于请求太长,您不能“捕获”脚本作为其终止。您可以尝试在关闭处理程序中做一些最后的事情,但我不确定 PHP 是否会遵守这一点。

看起来曾经有一个函数可以完全满足您的要求,connection_timeout(),但它已被弃用并删除。但是,不知道是否有任何替代品。

于 2009-09-15T17:26:43.760 回答