はじめに
PHP の system() 関数は外部コマンドを実行し、その出力や終了コードを扱うことができます。
PHP8 上級試験では、この関数の挙動や Linux の true
/ false
コマンドと組み合わせた問題が出題されることがあります。本記事では、実際のサンプルコードを通して system() の動作を確認し、試験で混同しやすいポイントを整理します。
目次
system() 関数の仕様
マニュアルによると、system() の定義は以下のとおりです。
system(string $command, int &$result_code = null): string|false
- コマンドを実行し、標準出力を画面にそのまま表示する
- 戻り値:コマンド出力の最後の行(出力がなければ空文字列
""
) - 第2引数
$result_code
に 終了コード(exit status) が格納される - 実行自体に失敗した場合は
false
を返す
Linux の true / false コマンド
true
→ 何も出力せず、終了コード0
を返すfalse
→ 何も出力せず、終了コード1
を返す
両者とも標準出力は空なので、system()
の戻り値は空文字列 ""
になります。
サンプルコードでの挙動確認
実際に以下のコードを実行してみます。
<?php
declare(strict_types=1);
error_reporting(-1);
$r = system('false', $result_code);
var_dump($r, $result_code);
echo "\n";
$r = system('true', $result_code);
var_dump($r, $result_code);
実行結果
出力は以下のようになります。
string(0) ""
int(1)
string(0) ""
int(0)
false
コマンド → 出力なし(空文字列)、終了コード1
true
コマンド → 出力なし(空文字列)、終了コード0
よくある誤解
試験問題などでは $result_code
を bool(false / true) と誤解させる選択肢が登場します。
しかし実際には int 型の終了コード が格納されます。
👉 つまり、false
コマンドの終了コードは 1
(失敗)、true
コマンドの終了コードは 0
(成功)です。
試験対策のまとめ
system()
の戻り値は「最後の出力行(出力なしなら空文字列)」$result_code
には 終了コード(int) が入る- Linux の
true
/false
は出力せずに 0 / 1 を返す - 試験では「bool と誤認させるひっかけ」に注意!
まとめ
PHP8 上級試験では、system()
関数の戻り値と終了コードの扱いが問われやすいです。
今回のようなシンプルなコードを実際に試してみることで、挙動を正確に理解でき、試験でも迷わず解答できるでしょう。