0

我有一个 Web 应用程序,它使用 php 的本机函数写入文件,例如fopen()fwrite()在进程结束时写入文件后,我关闭文件句柄fclose()

Web 应用程序还使用exec()shell_exec()在某些地方执行外部程序。

此 Web 应用程序主要部署在 Linux 服务器上。最近在生产服务器上,我们注意到它无法写入文件并抛出此错误的问题:

“打开的文件太多”

所以我的问题是:执行上述操作(文件写入和通过 PHP 执行外部命令)是否可能导致此问题并打开了太多打开的文件,我现在收到此错误?

我确保在打开文件句柄进行写入/读取时,我会关闭它们。

4

2 回答 2

0

可能吗?当然。甚至有可能,因为 ulimit 是每个进程的限制。

也许有一个流程问题使您的fclose代码无法运行(例如异常或 else 块?)。

做一些调试。甚至像在 fopen() 上增加一个计数器并在 fclose() 上减少它这样的基本操作也会说明问题。

于 2012-11-15T06:47:10.863 回答
0

这是因为您超过了默认打开文件数。您可以使用 增加打开文件的最大数量ulimit。检查以获取更多详细信息。

于 2012-11-15T06:35:40.237 回答