Windows/Mac/Linux上的php命名管道?
我目前正在使用php中的proc_open()与命令行工具进行通信。它会自动为STDIN、STDOUT和STDERR创建多达3个文件描述符,因为超过3个管道会破坏Windows兼容性。它在Windows XP和我的Mac上的10.7上运行得非常好 但是,我希望能够创建自己的命名管道,以实现更好的控制。如果我不能这样做,那么我必须维护流程资源和它的流资源之间的引用,这会使我的代码过于复杂。我不能使用文件,因为它们会为长时间的任务占用磁盘空间。我还试图避免使用套接字,因为它们在php中默认不启用 以下是我迄今为止找到的链接: 我已经在php 5.3.13中尝试了这些方法,但没有一种有效:Windows/Mac/Linux上的php命名管道?,php,windows,windows-xp,named-pipes,Php,Windows,Windows Xp,Named Pipes,我目前正在使用php中的proc_open()与命令行工具进行通信。它会自动为STDIN、STDOUT和STDERR创建多达3个文件描述符,因为超过3个管道会破坏Windows兼容性。它在Windows XP和我的Mac上的10.7上运行得非常好 但是,我希望能够创建自己的命名管道,以实现更好的控制。如果我不能这样做,那么我必须维护流程资源和它的流资源之间的引用,这会使我的代码过于复杂。我不能使用文件,因为它们会为长时间的任务占用磁盘空间。我还试图避免使用套接字,因为它们在php中默认不启用 以
var_dump(fopen("\\\\.\\pipe\\mypipe", "w+"));
var_dump(fopen("\\\\127.0.0.1\\pipe\\mypipe", "w+"));
var_dump(fopen("\\\\".php_uname('n')."\\pipe\\mypipe", "w+"));
我总是会遇到如下错误:
PHP Warning: fopen(\\.\pipe\mypipe): failed to open stream: No such file or directory in C:\Documents and Settings\Administrator\Desktop\named-pipe.php on line 15
PHP Stack trace:
PHP 1. {main}() C:\Documents and Settings\Administrator\Desktop\named-pipe.php:0
PHP 2. fopen() C:\Documents and Settings\Administrator\Desktop\named-pipe.php:15
Warning: fopen(\\.\pipe\mypipe): failed to open stream: No such file or directory in C:\Documents and Settings\Administrator\Desktop\named-pipe.php on line 15
Call Stack:
0.0018 431936 1. {main}() C:\Documents and Settings\Administrator\Desktop\named-pipe.php:0
0.0018 432072 2. fopen() C:\Documents and Settings\Administrator\Desktop\named-pipe.php:15
bool(false)
所以我的问题是,有人在Windows XP上成功打开了命名管道吗?如果没有,哪些版本的Windows支持命名管道?我不知道管道“文件”描述符是否需要已经存在,例如它是否必须由mysql或其他服务创建
如果您可以提供跨平台代码,可以使用posix_mkfifo()或系统(“mkfifo管道”),如以下答案所示,则可获得额外积分:
理想情况下,该解决方案应该与普通的php安装一起工作,因此不需要套接字等,但有什么帮助吗,谢谢。您真的读过吗
解决方法是不要在管道名称中使用点
您所有的示例都在管道名称中带有点。这是您正在编写的服务器代码吗?看起来您正在使用客户端调用,也许您需要先创建管道 不确定是否可以用php编写服务器,需要CreateNamedPipe()