获取PHP中所有打开的资源句柄

时间:2016-03-09 19:19:22

标签: php

我一直在使用PHP应用程序,它使用方法fopenftp_connect。运行应用程序的服务器之一抛出Fatal Exception,当打开的文件太多时,因此我需要找到所有使用该方法并重构它们的类,以便它们随后关闭文件句柄{{1 }和fclose

通过这样做,我想在之后添加一个集成测试,它会跟踪所有打开的资源,这样就不会再发生这样的事了。

有没有办法在PHP中执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以使用get_defined_vars()gettype()和 - 可选 - get_resource_type()获得所需的结果:

$resources = array();

foreach( get_defined_vars() as $key => $val )
{
    if( 'resource' == gettype( $val ) )
    {
        $resources[ get_resource_type( $val ) ][] = $key;
    }
}

foreach( $resources as $type => $res )
{
    echo sprintf( '%- 20s: % 3d%s', $type, count($res), PHP_EOL );
}

假设您拥有这些已打开的资源:

$handle = fopen( '/Your/File/Path' );
$ftp1   = ftp_connect ( 'ftp.site1.com' );
$ftp2   = ftp_connect ( 'ftp.site2.com' );

上面的代码将输出:

stream              :   1
FTP Buffer          :   2

答案 1 :(得分:1)

PHP 7.0.0引入了一个获取资源的函数,称为get_resources()