以下最小测试用例给出了这个输出:
string(3)“foo”
警告:第10行的/[...]/mkfifo.php中的资源ID#3的stat()[function.stat]:stat失败
布尔(假)
<?php
$pipe_name = 'foo';
if(!file_exists($pipe_name) && !posix_mkfifo($pipe_name, 0777)){
echo 'foo';
exit(1);
}
var_dump($pipe_name);
$pipe = fopen($pipe_name, 'r+');
var_dump(stat($pipe));
?>
当然我做错了什么?我使用了r +,因为根据http://php.net/manual/en/function.posix-mkfifo.php#89642它应该“适合我”,但正如你所看到的,我甚至没有机会去做非阻塞部分。我尚未尝试过的另类更详细的解决方案:http://php.net/manual/en/function.shell-exec.php#52826
答案 0 :(得分:3)
我认为您的错误是由于使用stat()
导致的。您为其提供了一个打开的文件资源,但它应仅与$filename
一起使用。
您的管道已正确打开,如Resource id #3
使用stat($pipe_name)
获取有关fifo的信息。
或者stream_get_meta_data($pipe)
表示已打开的文件句柄。