2011-04-08 123 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; 
}