捕获PHP脚本的正常和异常终止

时间:2012-06-20 05:40:48

标签: php event-handling shutdown

我有一个PHP脚本,有时会耗尽内存(进程耗尽它)并异常终止。我想知道PHP中是否有任何功能允许我在脚本终止时运行“清理”操作。我试过“关机处理程序”,但它们似乎没有被调用。

我可以使用“信号处理程序”或“关闭回调”吗?我想调用一个函数,当脚本退出时(通常或异常)执行某些操作。

1 个答案:

答案 0 :(得分:0)

PHP中没有像你希望的那样工作的清理功能。您可以/应该做的是查看您的代码,看看如何最好地进行优化,以便在不耗尽内存的情况下完成所需的操作。

PHP内置了一个函数,可以让您获得分配给PHP的当前内存量memory_get_usage。通过这个,您可以检查PHP当前使用的内存量,并将其与php.ini文件中分配的内存量进行比较。当你接近这个时,你可以退回或拿起另一个线程,而这个线程就离开了。

以下是一些你可以做的事情来调整PHP,也可能会节省一些内存,其中一些你可能已经知道,但如果我遇到同样的问题,那就是我的看法:

    如果可以,
  • 增加php.ini文件中的内存量,或者尝试使用ini_set来增加PHP的内存大小。如果你提高了内存量,这可能是问题的暂时解决方法
  • 使用unset函数,因为这会解除分配/删除变量并恢复PHP使用的一些内存
  • 尽可能重用变量,这包括在可重用的方法/函数中封装代码以及充分利用for / foreach / for..in循环
  • 尽量不要将大数据(文本或二进制文件)长期存储在内存中
  • 编写服务以卸载内存或处理器密集型操作,以便主代码不会超时执行
  • 使用排队,这样您就不会绑定到一个线程或脚本超时,以便处理您需要的所有内容。也许rabbitMQ或其他包可能适合您

PHP应该能够处理大量数据和大量转换,但是为了提高效率而做的任何事情都可以帮助它。

希望这有帮助, 利安 -