PHP がプロセス間で通信するには、パイプ (Pipe) と名前付きパイプ (名前付きパイプ)、シグナル (Signal)、メッセージ (メッセージ) キュー (メッセージ キュー)、共有メモリ、シグナル セマフォ、ソケット。
#この記事では、有名なパイプを経由して紹介するものをリストします。
パイプは、略語間の通信データを運ぶために使用されます。理解を容易にするために、パイプをファイルに例えると、プロセス A がパイプ P にデータを書き込み、次にプロセス B がパイプ P からデータを読み取ります。 php が提供するパイプライン操作 API は、基本的にファイル操作 API と同じで、パイプラインの作成に posix_mkfifo 関数を使用する点を除けば、読み込み、書き込み操作はファイル操作関数と同じです。 もちろん、ファイルを直接使用してパイプラインをシミュレートすることはできますが、その場合、パイプラインの機能は使用できなくなります。 パイプを介した通信の一般的な考え方は、まずパイプを作成し、次に子プロセスがパイプに情報を書き込み、親プロセスがパイプから情報を読み取ることです。これにより、親と子はプロセスは直接通信できます。<?php /** * author: NickBai * createTime: 2016/12/2 0002 上午 11:12 */ //创建管道 $pipePath = "/tmp/test.pipe"; if( !file_exists( $pipePath ) ){ if( !posix_mkfifo( $pipePath, 0666 ) ){ exit('make pipe false!' . PHP_EOL); } } //创建进程,子进程写管道,父进程读管道 $pid = pcntl_fork(); if( $pid == 0 ){ //子进程写管道 $file = fopen( $pipePath, 'w' ); fwrite( $file, 'hello world' ); sleep(1); exit(); }else{ //父进程读管道 $file = fopen( $pipePath, 'r' ); //stream_set_blocking( $file, False ); //设置成读取非阻塞 echo fread( $file, 20 ) . PHP_EOL; pcntl_wait($status); //回收子进程 }注: このコードは、Linux および php-cli モードでのみ実行できます。 7行目: パイプラインのパスを指定します。これは通常のファイルと変わりません。 行 9: posix_mkfifo 関数を使用してパイプを作成し、読み取りおよび書き込み権限を 0666 に設定します。
以上がPHPプロセス間で通信するにはいくつかの方法がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。