открыть и получить дескриптор системного файла - PullRequest
5 голосов
/ 09 апреля 2011

Я хочу получить системный файловый дескриптор возвращаемого ресурса при открытии файла с помощью open.Я предполагаю, что дескриптор является значением INT, которое обычно находится внутри / dev / fd /

. Я знаю, что могу прочитать из дескриптора, выполнив что-то вроде:

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

Но теперь я хочучтобы получить дескриптор для ресурса, открытого PHP * fopen ().Есть ли способ?

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Это довольно хакерский способ, но он работает!

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;
}
0 голосов
/ 09 апреля 2011

Поскольку вы пишете обертку для предохранителей, подумайте , не дублируя усилие этого расширения PECL . Конечно, он также не имеет никакой отвратительной документации, так что в лучшем случае это удар в темноте.

...