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()などで適切にエスケープし、セキュリティリスクに十分注意してください。
-
PHPのfeof()関数とは?使い方とサンプルコードを徹底解説
feof() 関数は、ファイルポインタがファイルの終端(EOF:End Of File)に達しているかどうかを判定するためのPHP組み込み関数です。ファイルポインタがEOFに達している場合、またはエラー(ソケットタイムアウトを含む)が発生した場合には TRUE を返し、それ以外の場合は FALSE を返します。 この関数は、fgets() や fgetss() などを使ってファイルを1行ずつ読み込む際に、ループの終了条件としてよく利用されます。 構文 feof(file_pointer) パラメータ file_pointer − 有効なファイルポインタである必要があります。具体的には、f
-
PHPのfclose()関数とは?ファイルポインタを閉じる方法をわかりやすく解説
PHPのfclose()関数は、fopen()などで開いたファイルポインタを閉じるための関数です。処理が成功した場合はTRUEを、失敗した場合はFALSEを返します。ファイル操作を行った後は、リソースを解放するために必ずfclose()でファイルを閉じることが推奨されています。 構文(Syntax) fclose(file_pointer) パラメータ(引数) file_pointer − 有効なファイルポインタを指定します。このポインタは、fopen()またはfsockopen()によって正常に開かれたファイルを指している必要があります。 戻り値(Return値) fclose()関数は