2012-06-20 78 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-

相關問題