我有一个PHP脚本,有时会耗尽内存(进程耗尽它)并异常终止。我想知道 PHP 中是否有任何功能允许我在脚本终止时运行"清理"操作。我尝试了"关闭处理程序",但它们似乎没有被调用。
是否有可以使用"信号处理程序"或"关闭回调"之类的东西?我想调用一个函数,当脚本退出(正常或异常)时执行一些操作。
PHP 中没有像您希望的那样工作的清理功能。您可以/应该做的是查看您的代码,了解如何最好地进行优化,以便在不耗尽内存的情况下完成所需的操作。
PHP内置了一个函数,可让您获取分配给 PHP 的当前内存量,称为 memory_get_usage。有了这个,您可以检查 PHP 当前使用的内存量,并将其与php.ini
文件中分配的内存量进行比较。当你接近这一点时,你可以退缩或从另一个线程中断的地方继续。
以下是您可以做的一些事情来调整 PHP,并可能节省一些内存,其中一些您可能已经知道,但如果我遇到同样的问题,我会看看:
- 如果可以,请增加
php.ini
文件中的内存量,或者尝试使用 ini_set 来增加 PHP 的内存大小。 如果您提高内存量,这可能是问题的临时解决方案 - 利用 unset 函数,因为这将解除分配/删除变量并恢复 PHP 使用的一些内存 尽可能重用
- 变量,这包括将代码封装在可重用的方法/函数中,以及充分利用for/foreach/for。在循环中
- 尽量不要在内存中长时间存储大数据(文本或二进制)
- 编写服务以卸载内存或处理器密集型操作,以便主代码不会超时执行
- 使用队列,这样您就不会绑定到一个线程或脚本超时来处理您需要的所有内容。也许 rabbitMQ 或其他软件包会适合您
PHP 应该能够处理大量数据和大量转换,但您可以为提高效率所做的任何事情都会对它有所帮助。
希望这有帮助,利亚姆-