2011-04-08 124 views
4

当我打开使用打开文件时,我想获取返回资源的系统文件描述符。我假设描述符是一个int值这通常是内部的/ dev/FD/打开并获取系统文件描述符

我知道我可以从描述符通过执行类似阅读:

fread("php://fd/$descriptor", $buflen); 

但现在我想要得到的描述符对于由PHP的fopen()打开的资源。有没有办法?

+0

'stat()'不会返回任何FD信息。它纯粹使用磁盘上的文件元数据,其中没有一个涉及谁在文件上保存打开的句柄。这些信息是从操作系统的文件系统处理程序中检索的。 – 2011-04-08 21:43:36

+0

谢谢,我已经相应地编辑了我的帖子。但我希望有一种方法可以从PHP fopen句柄获取系统文件描述符。 – 2011-04-08 21:50:17

+0

任何您需要该信息的原因?突破抽象层很少是一个好主意。 – 2011-04-08 22:06:20

回答

3

这是一个相当古怪的方式,但它的工作原理!

function fd($realpath) { 
    $dir = '/proc/self/fd/'; 
    if ($dh = opendir($dir)) { 
     while (($file = readdir($dh)) !== false) { 
      $filename = $dir . $file; 
      if (filetype($filename) == 'link' && realpath($filename) == $realpath) { 
      closedir($dh); 
      return $file; 
      } 
     } 
     closedir($dh); 
    } 
    return FALSE; 
}