打开并获取系统文件描述符


fopen and getting system file descriptor

我想在使用open打开文件时获得返回资源的系统文件描述符。我假设描述符是一个INT值,通常位于/dev/fd/

内。

我知道我可以这样从描述符中读取:

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

但是现在我想获得由PHP的fopen()打开的资源的描述符。有办法吗?

这是一个相当粗糙的方法,但它的工作!

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;
}

因为您正在编写一个保险丝包装器,所以请考虑不要重复这个PECL扩展的工作。当然,它也没有任何该死的文档,所以这充其量是在黑暗中摸索。