PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのpopen()関数とは?使い方・構文・戻り値をサンプルコード付きで解説

popen()関数は、外部コマンドとの間でデータのやり取りを行うための「パイプ」を開くPHPの関数です。実行したいコマンドを指定すると、そのプロセスへのファイルポインタが返されます。このファイルポインタは、fgets()やfgetss()、fwrite()といった標準的なファイル操作関数と組み合わせて利用できます。

重要なポイントとして、popen()関数で開いたファイルポインタは、必ずpclose()関数で閉じる必要があります。閉じ忘れるとリソースリークの原因になるため、処理の最後には必ずpclose()を呼び出すようにしましょう。

構文

popen(command, mode)

パラメータ

  • command − 実行するコマンドを文字列で指定します。

  • mode − パイプのモードを指定します。「r」(読み取り専用)や「w」(書き込み専用)などがあります。

戻り値

popen()関数は、成功した場合にTRUE(ファイルポインタ)を返し、エラーが発生した場合にはFALSEを返します。返されたファイルポインタは、pclose()で閉じるまで有効です。

使用例

まずは、最も基本的なパイプの開き方から見ていきましょう。

<?php
   // パイプを開く
   $file_pointer = popen("/bin/ls", "r");
   pclose($file_pointer);
?>

出力結果

TRUE

続いて、別のコマンドを指定した例です。

使用例

<?php
   // パイプを開く
   $file_pointer = popen("/executable/installer.exe", "r");
   pclose($file_pointer);
?>

出力結果

TRUE

補足:コマンドの出力を読み取る実践的な使い方

実務では、fgets()と組み合わせて、実行したコマンドの出力を1行ずつ読み取るケースが多くあります。以下のようにwhileループとfeof()を併用すると、出力全体を取得できます。

<?php
$handle = popen("/bin/ls", "r");
while (!feof($handle)) {
   echo fgets($handle);
}
pclose($handle);
?>

このようにpopen()関数を使えば、シェルコマンドの実行結果をPHPスクリプト内で柔軟に扱うことができます。ただし、ユーザー入力をコマンドに渡す場合は、escapeshellarg()などで適切にエスケープし、セキュリティリスクに十分注意してください。

  1. PHPのfeof()関数とは?使い方とサンプルコードを徹底解説

    feof() 関数は、ファイルポインタがファイルの終端(EOF:End Of File)に達しているかどうかを判定するためのPHP組み込み関数です。ファイルポインタがEOFに達している場合、またはエラー(ソケットタイムアウトを含む)が発生した場合には TRUE を返し、それ以外の場合は FALSE を返します。 この関数は、fgets() や fgetss() などを使ってファイルを1行ずつ読み込む際に、ループの終了条件としてよく利用されます。 構文 feof(file_pointer) パラメータ file_pointer − 有効なファイルポインタである必要があります。具体的には、f

  2. PHPのfclose()関数とは?ファイルポインタを閉じる方法をわかりやすく解説

    PHPのfclose()関数は、fopen()などで開いたファイルポインタを閉じるための関数です。処理が成功した場合はTRUEを、失敗した場合はFALSEを返します。ファイル操作を行った後は、リソースを解放するために必ずfclose()でファイルを閉じることが推奨されています。 構文(Syntax) fclose(file_pointer) パラメータ(引数) file_pointer − 有効なファイルポインタを指定します。このポインタは、fopen()またはfsockopen()によって正常に開かれたファイルを指している必要があります。 戻り値(Return値) fclose()関数は