我有一个使用php的本机函数写入文件的Web应用程序,例如fopen()
,fwrite()
在流程结束时写入文件后,我通过fclose()
关闭文件句柄。
Web应用程序还在某些地方使用exec()
和shell_exec()
来执行外部程序。
此Web应用程序主要部署在Linux服务器上。最近在生产服务器上,我们注意到一个问题,它无法写入文件并抛出此错误:
“打开的文件过多”
所以我的问题是:是否有可能执行上述操作(文件编写和通过PHP执行外部命令)可能导致此操作并打开太多打开的文件而我现在收到此错误?
我已经确定在打开文件句柄进行写入/读取时,我会关闭它们。
答案 0 :(得分:0)
这是因为您超过了打开文件的默认数量。您可以使用ulimit
增加打开文件的最大数量。查看this了解详情。
答案 1 :(得分:0)
有可能吗?当然。甚至可能,因为ulimit是每个进程的限制。
可能存在一个流程问题,导致fclose
代码无法运行(例如异常或其他阻止?)。
做一些调试。甚至一些基本的东西,比如在fopen()上递增一个计数器并在fclose()上递减它就会说明。