【PHP8.x】proc_open関数の使い方

作成日: 更新日:

proc_open関数は、パイプを開いて外部コマンドを実行する関数です。複数のパイプを開き、親プロセスと子プロセス間で入出力を双方向に行うことが可能です。この関数は、PHPスクリプトから他のプログラムを実行し、そのプログラムとの間でデータのやり取りを行いたい場合に非常に役立ちます。

具体的には、proc_open関数は、実行するコマンド、ディスクリプタの設定、パイプ、ワーキングディレクトリ、環境変数を引数として受け取ります。ディスクリプタの設定は、子プロセスの標準入力、標準出力、標準エラー出力をどのように扱うかを定義します。パイプは、親プロセスと子プロセス間のデータ伝送に使用されます。ワーキングディレクトリは、子プロセスの実行ディレクトリを指定します。環境変数は、子プロセスに渡される環境変数を設定します。

proc_open関数は、実行されたプロセスのリソースを返します。このリソースを使用して、proc_close関数でプロセスを終了させたり、proc_get_status関数でプロセスの状態を取得したり、fgetsfwriteなどの関数でパイプを通してデータの読み書きを行ったりすることができます。

proc_open関数を使用する際には、セキュリティ上の注意が必要です。外部コマンドを実行するため、コマンドインジェクション攻撃を受ける可能性があります。そのため、実行するコマンドは信頼できるソースからのみ取得し、ユーザーからの入力は適切に検証する必要があります。また、パイプを通じて機密情報が漏洩しないように注意することも重要です。proc_open関数は、複雑な処理を行うための強力なツールですが、適切なセキュリティ対策を講じて使用する必要があります。

基本的な使い方

構文(syntax)

proc_open ( string $command , array $descriptor_spec , array &$pipes , string $cwd = null , array $env_vars = null , array $options = null ) : resource|false

引数(parameters)

string|array $command, array $descriptor_spec, array &$pipes, ?string $cwd = null, ?array $env_vars = null, ?array $options = null

  • string|array $command: 実行するコマンドライン文字列、またはコマンドと引数の配列
  • array $descriptor_spec: 3つの標準ストリーム(標準入力、標準出力、標準エラー出力)のハンドリング方法を指定する連想配列
  • array &$pipes: 開かれたファイルポインタの配列。標準入力、標準出力、標準エラー出力にそれぞれ対応
  • ?string $cwd = null: コマンドを実行するカレントディレクトリ
  • ?array $env_vars = null: コマンド実行時に使用する環境変数の連想配列
  • ?array $options = null: プロセス実行時の追加オプションを指定する連想配列

戻り値(return)

リソース

proc_open関数は、新しいプロセスを開き、そのプロセスへのパイプ接続を確立します。この関数は、成功した場合、プロセスの標準入力、標準出力、標準エラー出力へのパイプを表す3つのファイルポインタを含むリソースを返します。このリソースは、後続のproc_close関数などで使用されます。

【PHP8.x】proc_open関数の使い方 | いっしー@Webエンジニア