2012-11-15 65 views
0

我有一個使用PHP的本地函數寫入文件的Web應用程序,例如fopen(),fwrite()寫入文件後,我通過做fclose()關閉文件句柄。PHP Web應用程序拋出「打開的文件太多」

Web應用程序還在某些地方使用exec()shell_exec()來執行外部程序。

該Web應用程序大部分部署在Linux服務器上。最近在生產服務器上,我們注意到一個問題,即它無法寫入文件,並拋出這個錯誤:

"Too many open files"

所以我的問題是:是否有可能做上述操作(文件寫入和通過PHP執行外部命令)可能導致這種情況,並打開太多打開的文件,我現在得到這個錯誤?

我已經確保在打開寫入/讀取文件句柄時,我關閉它們。

回答

0

這是因爲你超過了打開文件的默認數量。您可以使用ulimit來增加打開文件的最大數量。查詢this瞭解更多詳情。

+2

修復原因不是症狀 – 2012-11-15 06:38:23

+0

是的。修復代碼會更有幫助,因爲如果沒有修復,那麼它也會在將來產生問題。 –

+0

我最近不得不打開2000多個文件並面臨同樣的問題,所以提出了相同的解決方案。但我同意你的看法,只有在需要的情況下才能完成。 – Naveed

0

這可能嗎?當然。甚至可能,因爲ulimit是每個進程的限制。

也許存在一個流程問題,使fclose代碼不能運行(如異常或其他塊?)。

做一些調試。即使在fopen()上增加一個計數器和在fclose()上遞減計數器這樣的基本事情也會告訴你。

+0

檢查代碼並確保'fclose'沒有放在任何條件語句下,並且在運行'fopen'後總是被調用。現在進一步調試應用程序以確保它也按預期執行。 –

+0

交叉手指! –

相關問題