PHPは、Webサービス、メッセージキュー、ソケット、一時ファイル、exec()
など、外部アプリケーションと交換データと対話するさまざまな方法を提供します。この記事では、効率的なインタープロセス通信(IPC)のためのオープンファイルポインターを使用してコマンドを生成する関数に焦点を当てています。
proc_open()
proc_open()
とは異なり、PHPコード内のシステムコマンド、スクリプト、またはアプリケーションとの対話に最適なパイプ経由で入力ストリームと出力ストリームを向けることができます。
exec()
パイプ:proc_open()
匿名パイプ:proc_open()
proc_open()
escapeshellarg()
パイプの理解:escapeshellcmd()
のデータ交換メカニズムの基本です。 UNIX哲学は、プレーンテキストを介して通信する小さな専門的なプログラムを促進しています。 パイプはこれらのプログラムを接続し、次のプログラムの出力を次のプログラムとしてチャネリングします。 これは、FIFO(ファーストイン、ファーストアウト)構造です。 例には、シェルリダイレクト()の使用が含まれます
詳細:proc_open()
$ mysql -u dbuser -p < mydata.sql
コマンド(に類似)を実行しますが、パイプを使用した入出力ストリームを制御することが追加されています。 本質的な議論には次のものがあります: 、または
この例は、を使用して、Nyctergatis Markupエンジン(NME)を使用してWikiマークアップをHTMLに変換することを示しています:
このコードは、記述子配列を定義し、NMEを生成し、stdinを介してWikiコンテンツを送信し、STDOUTからHTML出力を読み取り、STDERRを介してエラーメッセージを処理します。 重要なことに、Stdinは入力の終わりを知らせるために書き込み後に閉じられます。
は、外部プロセスと対話する強力な方法を提供します。 その有効性は、アプリケーションの特定のニーズに依存します。 提供された例は、その使用法を示しており、適切なリソース管理とセキュリティの考慮事項の重要性を強調しています。 脆弱性を防ぐためにユーザーの入力を消毒することを忘れないでくださいproc_open()
、['pipe', 'r']
です。 名前付きパイプは['pipe', 'w']
などを使用します。['pipe', 'a']
ファイル/ストリーム関数で使用できるリソースを返します(['file', 'filename', 'r']
、proc_open()
、fwrite()
)。 適切なクリーンアップのために、パイプ(fread()
)とプロセスリソース(stream_get_contents()
)を閉じることを忘れないでください。
fclose()
proc_close()
実用的な例:wikiマークアップ変換:proc_open()
<?php
$desc = [
0 => ['pipe', 'r'], // STDIN
1 => ['pipe', 'w'], // STDOUT
2 => ['file', '/tmp/error-output.txt', 'a'] // STDERR
];
$cmd = "nme --strictcreole --autourllink --body --xref";
$p = proc_open($cmd, $desc, $pipes);
fwrite($pipes[0], $content);
fclose($pipes[0]);
$html = stream_get_contents($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($p);
?>
以上がPHPマスター| Proc_open:外の世界とのコミュニケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。