我目前在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
我試過每一種在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,所以沒有套接字等,但任何幫助謝謝。