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

作成日: 更新日:

popen関数は、指定された外部コマンドを実行し、そのプロセスとの間でデータのやり取りを行うためのファイルポインタを開く関数です。この関数を利用することで、PHPスクリプトから外部プログラムの標準入力や標準出力に対して、まるでファイルのように読み書きできるようになります。

第一引数には実行したい外部コマンドを文字列で指定します。例えば、ls -lのようにシェルコマンドを記述します。第二引数には、外部プロセスとの通信モードを文字列で指定します。rを指定すると、外部コマンドの標準出力をPHPスクリプトから読み取ることが可能になり、wを指定すると、PHPスクリプトから外部コマンドの標準入力へデータを書き込むことが可能になります。

関数が成功した場合、外部プロセスへのパイプを表すファイルポインタ(リソース)を返します。このファイルポインタに対してfread()fwrite()などの通常のファイル操作関数を使用することで、外部コマンドとの間でデータを送受信できます。もし外部コマンドの実行に失敗したり、パイプを開けなかったりした場合は、falseを返します。

popen関数で開いたファイルポインタは、処理が終わった後に必ずpclose()関数を使って閉じる必要があります。また、外部コマンドの実行は、悪意のある入力によって意図しないコマンドが実行される「シェルインジェクション」といったセキュリティリスクを伴うため、信頼できないユーザーからの入力値をコマンドに直接含める際は、十分な検証と対策を行うことが重要です。

基本的な使い方

構文(syntax)

popen(string $command, string $mode): resource|false

引数(parameters)

string $command, string $mode

  • string $command: 実行するコマンドを指定する文字列
  • string $mode: ファイルポインタのモードを指定する文字列('r':読み取り、'w':書き込み)

戻り値(return)

resource|false

指定されたコマンドを実行し、そのプロセスへのファイルポインタを返します。コマンドの実行に失敗した場合は false を返します。