I want to get a system file descriptor of the returned resource when I open a file using open. I assume the descriptor is an INT value which is normally inside /dev/fd/
I know that I can read from the descriptor by doing something like:
fread("php://fd/$descriptor", $buflen);
But now I want to get the descriptor for a resource opened by PHP's fopen
(). Is there a way?
This is a rather hacky way around it but it works!
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;
}
Because you're writing a fuse wrapper, consider not duplicating the effort of this PECL extension. Of course, it also doesn't have any freaking documentation, so this is a stab in the dark at best.
来源:https://stackoverflow.com/questions/5600811/fopen-and-getting-system-file-descriptor