当前位置: 首页 > 知识库问答 >
问题:

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

喻渊
2023-03-14

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

然而,我希望能够创建我自己的命名管道,以便更好地控制。如果我不能这样做,那么我必须维护进程资源及其流资源之间的引用,这使我的代码过于复杂。我不能使用文件,因为它们会填满长任务的磁盘空间。我也试图避免使用套接字,因为它们在PHP中默认不启用。

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

http://bytes.com/topic/php/answers/557245-named-pipes-windows

https://bugs.php.net/bug.php?id=29005

在C#PHP中使用命名管道进行进程间通信

http://en.wikipedia.org/wiki/Named_pipe#In_Windows

http://www.phpkode.com/source/p/xp-framework/xp-framework-xp-framework-554d8b2/core/src/main/php/rdbms/mysqlx/NamedPipe.class.php

我已经在PHP5.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)

所以我的问题是,有人在视窗XP上成功打开了一个命名管道吗?如果没有,什么版本的Windows支持命名管道?我不知道管道“文件”描述符是否需要已经存在,例如它是否必须由mysql或其他服务创建。

如果你能提供跨平台代码,也许可以使用posix_mkfifo()或系统(“mkffo管道”),奖励积分如下:

http://www.php.net/manual/en/function.popen.php#22801

理想情况下,该解决方案应该与普通的php安装一起工作,因此不需要套接字等,但任何帮助都可以,谢谢。

共有2个答案

张淳
2023-03-14

这是你正在写的服务器代码吗?看起来你正在使用客户端调用,也许你需要先创建管道?

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365590(v=vs.85)

不确定你可以在PHP中编写服务器,需要CreateNamedPipe()。

余善
2023-03-14

你真的读过吗http://bytes.com/topic/php/answers/557245-named-pipes-windows ?

解决方法是不要在管道名称中使用点。

你们所有的样品都在管道的名称上有点。

 类似资料:
  • 写这篇文章的原因是再次阅读王珢《谈 Linux,Windows 和 Mac》有感。 Linux 和 Unix 里面包含了一些非常糟糕的设计。 毫无疑问,但是很多 Linux 狂热分子却对此避而不谈,赞美(正面意义)的文章却广为传播,因此初学者容易留下刻板的印象。作为一个(桌面领域)需要推广的操作系统可能并不是错误的决定,但是对于真正想要学习 Linux 和 Unix 哲学的人会造成负面影响。 另外

  • 本文向大家介绍Windows / Linux / Mac OS上推荐的C#IDE,包括了Windows / Linux / Mac OS上推荐的C#IDE的使用技巧和注意事项,需要的朋友参考一下 Windows上最佳的C#IDE是Microsoft Visual Studio。它是开发网站,Web应用程序,移动应用程序等的IDE。 以下是Visual Studio IDE的功能- 代码编辑器-Vi

  • 问题内容: 我知道对于当前版本的Linux内核,命名管道的大小为64K。是否有可能完全增加此大小? 我知道我可以切换到套接字,但是首先我想看看是否可以通过仅增加命名管道的大小来解决间歇性的缓冲区溢出问题。 问题答案: 使用最新的内核(> = 2.6.35),您可以使用以下命令更改管道的大小 哪里是。最大大小为。

  • 我已经从Linux(Ubuntu)迁移到Mac OS。我用Java(swing)编写了一个应用程序。我已经成功地运行了同样的代码在windows和linux但在mac os我有一些问题。 下面是注释中的代码和问题: 另一个: 我当然编不出来。 Java版本:Ubuntu: java版本“1.7.0_07”java(TM)SE运行时环境(build 1.7.0_07-B10)java HotSpot

  • 如果我执行plink命令 当提示输入密码时,我将获得 Sudo:没有tty存在,也没有指定askpass程序 Sudo:3次错误的密码尝试 如何从执行sudo?或者有其他选择吗?

  • 本文向大家介绍Windows匿名管道,包括了Windows匿名管道的使用技巧和注意事项,需要的朋友参考一下 Windows匿名管道实际上是普通管道,它们的行为与UNIX管道类似:它们是单向的,并且在通信进程之间采用父子关系。另外,可以使用普通的ReadFile()和WriteFile()函数来完成对管道的读取和写入。Windows API使用CreatePipe()函数创建管道,该函数传递了四个参