當我打開使用打開文件時,我想獲取返回資源的系統文件描述符。我假設描述符是一個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