2013-07-30 165 views
1

我目前在php中使用proc_open()與命令行工具進行通信。它會自動爲STDIN,STDOUT和STDERR創建最多3個文件描述符,因爲超過3個管道會破壞Windows兼容性。它在Windows XP和Mac 10.7上運行良好。在Windows/Mac/Linux上的命名管道?

但是,我希望能夠創建自己的命名管道,以便更好地控制。如果我無法這樣做,那麼我必須在流程資源和流資源之間保持引用,這會使我的代碼過於複雜。我無法使用文件,因爲它們填滿了長時間任務的磁盤空間。我也試圖避免使用套接字,因爲它們在默認情況下並未啓用。

下面是到目前爲止,我已經找到了鏈接:

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

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

Interprocess Communication using Named Pipes in 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

我試過每一種在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管」)就像這個答案加分點:

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

理想的解決方案應該與香草工作安裝的PHP,所以沒有套接字等,但任何幫助謝謝。

回答