2012-11-15 20 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

交叉手指! –

相关问题