PHP から Windows の名前付きパイプを複数回開くことができないようです。
$pipe1 = fopen($pipeName, 'r+'); // (1)
fclose($pipe1);
$pipe2 = fopen($pipeName, 'r+'); // (2)
fclose($pipe2);
(1) が成功し、パイプに書き込むか、ブロック読み取りを開くことができます。
(2) で失敗する
fopen(\\.\pipe\encoding): ストリームを開けませんでした: 引数が無効です
「無効な引数」はモードを参照しているようですが、(1) と (2) の間でモードのさまざまな組み合わせをすべて試しましたが、違いはありませんでした。また、同じプロセスであろうと別のプロセスであろうと失敗します。
私はパイプを作成しています:
CreateNamedPipe("\\\\.\\pipe\\encoding", 3, 0, 5, 512, 512, 0, 0);
ここで、「3」は読み取り/書き込みパイプになり、「5」は作成できるインスタンスの最大数です。CreateNamedPipeの引数のさまざまな組み合わせも試しましたが、役に立ちませんでした。
Windows の名前付きパイプについて見逃している特別なものはありますか?