0

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

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

4

1 回答 1

0

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

PHP 有一个内置函数,可以让您获取分配给 PHP 的当前内存量,称为memory_get_usage。使用它,您可以检查 PHP 当前使用了多少内存,并将其与php.ini文件中分配的内存量进行比较。当您接近这一点时,您可以退后或在另一个线程中重新开始。

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

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

PHP 应该能够处理大量数据和大量转换,但您可以做的任何事情来提高效率都会帮助它一路走来。

希望这会有所帮助,利亚姆-

于 2012-06-20T06:15:51.387 回答