PHPのpclose()関数とは?使い方と戻り値をわかりやすく解説
はじめに
PHPには、外部コマンドやプロセスを実行するための便利な関数群が用意されています。その中でもpclose()関数は、popen()関数によって開かれたパイプを閉じる役割を担う重要な関数です。
この記事では、pclose()関数の基本的な仕組み、構文、パラメータ、戻り値について、具体的なコード例を交えながら詳しく解説していきます。
pclose()関数とは
pclose()関数は、popen()関数で開いたプロセスへのファイルポインタ(パイプ)を閉じるために使用されます。パイプを閉じる際には、実行されていたプロセスの終了を待ち、その終了ステータスを返り値として受け取ることができます。
もしエラーが発生した場合は、-1が返されます。
主な特徴
- popen()で開いたリソース専用であり、通常のファイルポインタには使用できません
- パイプを閉じる際、接続先のプロセスが終了するまで処理がブロックされます
- プロセスの終了ステータスを取得できるため、外部コマンドの成否判定に活用できます
構文
pclose(file_pointer)
パラメータ
file_pointer − popen()関数によって返された、有効なパイプ(ファイルポインタ)を指定します。必須のパラメータです。
戻り値
pclose()関数は、実行されたプロセスの終了ステータスを整数値で返します。
- 正常に処理が完了した場合:実行プロセスの終了ステータス
- エラーが発生した場合:-1
使用例
例1:/bin/ls コマンドのパイプを開いて閉じる
<?php
// パイプを開く
$file_pointer = popen("/bin/ls", "r");
pclose($file_pointer);
?>
出力結果
TRUE
この例では、まずpopen()関数を使って「/bin/ls」コマンドを読み取りモード("r")で実行し、パイプを開いています。その後、pclose()関数でパイプを閉じています。処理が正常に完了するとTRUEが返ります。
例2:実行可能ファイルのパイプを開いて閉じる
続いて、別の例を見てみましょう。
<?php
// パイプを開く
$file_pointer = popen("/executable/setup.exe", "r");
pclose($file_pointer);
?>
出力結果
TRUE
こちらの例では、「/executable/setup.exe」という実行可能ファイルに対してパイプを開き、pclose()関数で閉じています。この場合も正常に処理され、TRUEが出力されます。
まとめ
pclose()関数は、popen()関数とセットで使われることで初めて機能する関数です。外部コマンドを実行してその結果を扱いたい場合、パイプの後始末として必ずpclose()を呼び出すようにしましょう。
特に注意すべき点は以下の通りです。
- popen()で開いたリソースは、必ずpclose()で閉じる(リソースリーク防止)
- 戻り値の終了ステータスを確認することで、コマンドの成否を判定できる
- エラー時は-1が返るため、必要に応じてエラーハンドリングを行う
外部プロセスとの連携を行うPHPアプリケーションを開発する際には、ぜひ本記事の内容を参考にしてください。
-
PHPのlog()関数とは?自然対数の計算方法と使い方を解説
定義と使い方log() 関数は、数値の自然対数(natural logarithm)を計算します。対数とは、指数関数の逆演算のことです。たとえば 102=100 という関係は「log10100=2」と表せます。自然対数はオイラー数 e を底として計算され、PHP では定義済み定数 M_E によって e の値(2.7182818284590452354)が提供されています。具体例を挙げると、exp(4.60517018599)=100(つまり e4.60517018599=100)が成り立つため、loge100=4.60517018599 となります。PHP では、この自然対数(loge)を l
-
PHPのlcg_value()関数とは?乱数生成の基本と使い方を解説
lcg_value()関数の定義と使い方lcg_value()関数は、0から1までの範囲でランダムな数値(浮動小数点数)を生成するPHP組み込み関数です。「LCG」とは「線形合同法(Linear Congruential Generator)」の略称です。この手法は、不連続な区分線形方程式を用いて擬似乱数列を計算するアルゴリズムで、擬似乱数生成アルゴリズムの中でも最も古くから知られているものの一つです。構文lcg_value ( void ) : floatパラメータこの関数は引数を受け取りません。戻り値lcg_value()関数は、0.0以上1.0以下の範囲にある擬似乱数のfloat値を返し