Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows/Mac/Linux上的php命名管道?_Php_Windows_Windows Xp_Named Pipes - Fatal编程技术网

Windows/Mac/Linux上的php命名管道?

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中默认不启用 以

我目前正在使用php中的proc_open()与命令行工具进行通信。它会自动为STDIN、STDOUT和STDERR创建多达3个文件描述符,因为超过3个管道会破坏Windows兼容性。它在Windows XP和我的Mac上的10.7上运行得非常好

但是,我希望能够创建自己的命名管道,以实现更好的控制。如果我不能这样做,那么我必须维护流程资源和它的流资源之间的引用,这会使我的代码过于复杂。我不能使用文件,因为它们会为长时间的任务占用磁盘空间。我还试图避免使用套接字,因为它们在php中默认不启用

以下是我迄今为止找到的链接:

我已经在php 5.3.13中尝试了这些方法,但没有一种有效:

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()