2010-04-15 71 views
1

在PHP 5.2.3中,“fdopen”用于读取/写入由另一个应用程序打开的文件描述符。从文件描述符获取文件指针

fdopen(<fileDescriptorId>,"rw"); //It worked fine with PHP 5.2.3 

升级PHP 5.3.2之后,它抛出 “undefined reference to 'fdopen' function”。

请在PHP 5.3.2或任何解决方法建议什么是替代。

+1

仅供参考,截至PHP/5.3.6,'php:// fd' wrapper [支持](http://php.net/manual/en/wrappers.php.php)。 – DaveRandom 2012-03-30 11:44:47

回答

0

fdopenC语言。 PHP中没有这样的功能。我认为你错误地输入了PHP的fopen函数,对吧?纠正我。谢谢

+0

是的,我也在PHP 5.2.3 API中搜索“fdopen”,但找不到这个。 但是它没有报告任何与PHP 5.2.3 [错误检查并没有错误类型]的错误可能是因为VolkerK建议可能已经使用该版本构建了一些其他扩展。 – 2010-04-15 15:52:35

2

你的这个fdopen()是否由自定义php扩展提供?
在Linux/Unix服务器

function fdopen($id, $mode) { 
    return fopen("/proc/self/fd/".(int)$id, $mode); 
} 

威力工作。

编辑:见http://linux.die.net/man/5/proc

+0

谢谢。 PHP-cgi binary由在jail目录(沙箱)中运行的web服务器调用。因此,它无法访问文件(套接字)路径(“/ proc/self/fd /”。(int)$ id ,$模式)直接。 有没有什么方法可以在PHP中读/写给定的文件描述符编号[假设文件路径不知道在这种情况下是不可访问的]。 请让我知道您的意见。 – 2010-04-16 12:08:40

0

由于PHP 5.3.6(并且仍然有效,并与PHP 7.2.1工作),正确的方法来访问文件的描述符是使用fopenphp://fd

$fd = 3; 
$pipe = fopen("php://fd/{$fd}", 'w'); 
fwrite($pipe, 'hello!');