2012-06-20 75 views
0

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

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

+0

这是命令行PHP或运行的Web应用程序的一部分? PHP代码是否在任何类型的框架或库中? – Liam

+0

您是否考虑过数据库中的条目(不知道此脚本运行的频率)是否已经启动并在脚本末尾被删除?通过查看表格中的行,您可以非常容易地查看任何和所有未能完成的脚本? – Fluffeh

+0

这可能有帮助 - http://php.net/manual/en/function.pcntl-signal.php –

回答

0

PHP中没有任何清理功能,可以像您希望的那样工作。你可以/应该做的就是看看你的代码,看看如何进行最优化以完成你所需要的操作而不会导致内存不足。

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

这里有一些事情可以做,以调整PHP还可能节省一些内存,其中一些你可能已经知道,但如果我有同样的问题我是这样看的:

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

PHP应该能够处理大量的数据和大量的变换,但任何事情可以做,以提高效率将只是帮助它沿着它的方式。

希望这有助于 liam-

相关问题