当我打开使用打开文件时,我想获取返回资源的系统文件描述符。我假设描述符是一个int值这通常是内部的/ dev/FD/打开并获取系统文件描述符
我知道我可以从描述符通过执行类似阅读:
fread("php://fd/$descriptor", $buflen);
但现在我想要得到的描述符对于由PHP的fopen
()打开的资源。有没有办法?
当我打开使用打开文件时,我想获取返回资源的系统文件描述符。我假设描述符是一个int值这通常是内部的/ dev/FD/打开并获取系统文件描述符
我知道我可以从描述符通过执行类似阅读:
fread("php://fd/$descriptor", $buflen);
但现在我想要得到的描述符对于由PHP的fopen
()打开的资源。有没有办法?
由于您正在编写保险丝包装,请考虑not duplicating the effort of this PECL extension。当然,它也没有任何怪异的文档,所以这是一个在黑暗中最好的刺。
这是一个相当古怪的方式,但它的工作原理!
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;
}
'stat()'不会返回任何FD信息。它纯粹使用磁盘上的文件元数据,其中没有一个涉及谁在文件上保存打开的句柄。这些信息是从操作系统的文件系统处理程序中检索的。 – 2011-04-08 21:43:36
谢谢,我已经相应地编辑了我的帖子。但我希望有一种方法可以从PHP fopen句柄获取系统文件描述符。 – 2011-04-08 21:50:17
任何您需要该信息的原因?突破抽象层很少是一个好主意。 – 2011-04-08 22:06:20