【问题标题】:How many open files in PHP?PHP中有多少个打开的文件?
【发布时间】:2012-06-13 10:11:35
【问题描述】:

PHP中有没有查询打开文件数的函数?

有点像memory_get_usage(),但用于打开的文件。

我正在运行 Zend Framework 的单元测试套件。问题是它通过 Zend_Search_Lucene 的测试后,后续测试开始失败。但是如果我跳过 Zend_Search_Lucene 测试,所有的测试套件都会成功。

我想证明 Zend_Search_Lucene(或任何其他测试套件)打开了太多文件并且没有自行清理。我认为 PHP 可能有一个函数来简单地报告打开了多少文件。但是在搜索 PHP 手册和谷歌 20 分钟后,我找不到任何这样的功能。

【问题讨论】:

    标签: php unit-testing file-io


    【解决方案1】:

    PHP 中没有这样的功能。

    但还有其他选择。如果您正在运行 linux/unix/OSX,那么从命令行运行 lsof 可以为您提供该信息。

    这可以与 PHPUnit 的自定义测试侦听器结合使用 - 我在另一个问题下描述了该方法 - How to wrap PHPUnit to control command line reporting?

    PHPUnit_Framework_TestListener 接口具有 startTest()、endTest()、startTestSuite()、endTestSuite() 等方法。您可以从这些方法执行 shell_exec 调用 lsof 并在每个测试/测试套件之前和之后打印出有趣的数字。

    【讨论】:

    • 感谢您的建议,我会记住它以备将来使用。这一次,我只是在我认为是罪魁祸首的测试的 tearDown() 中运行了system("lsof -p ".getmypid()),结果发现是。
    【解决方案2】:

    对于打开的文件:我正在使用 lsof

    http://novosial.org/debug/unix/lsof/

    【讨论】:

      【解决方案3】:

      我要做的是 unregister 默认流处理程序,然后是 register 我自己的,我将为 stream_open 提供一个实现,它保留一个内部计数器。

      【讨论】:

        【解决方案4】:

        这两个可能会满足您的需求:

        这是一个疯狂的猜测,因为我从未使用过 APD(它是 PECL),所以它可能是 resources 不指代实际的 resource 类型。不幸的是,我找不到任何显示输出的文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-30
          • 2015-12-17
          • 2012-09-09
          • 2012-08-14
          • 2020-06-08
          • 2021-03-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多