《PHP8上級試験対策》system()関数と true/false コマンドの挙動を理解する

  • URLをコピーしました!

はじめに

PHP の system() 関数は外部コマンドを実行し、その出力や終了コードを扱うことができます。
PHP8 上級試験では、この関数の挙動や Linux の true / false コマンドと組み合わせた問題が出題されることがあります。本記事では、実際のサンプルコードを通して system() の動作を確認し、試験で混同しやすいポイントを整理します。

キーワード: system関数 / trueコマンド / falseコマンド / 外部コマンド実行

目次

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_codebool(false / true) と誤解させる選択肢が登場します。
しかし実際には int 型の終了コード が格納されます。

👉 つまり、false コマンドの終了コードは 1(失敗)、true コマンドの終了コードは 0(成功)です。

試験対策のまとめ

  • system() の戻り値は「最後の出力行(出力なしなら空文字列)」
  • $result_code には 終了コード(int) が入る
  • Linux の true / false は出力せずに 0 / 1 を返す
  • 試験では「bool と誤認させるひっかけ」に注意!

まとめ

PHP8 上級試験では、system() 関数の戻り値と終了コードの扱いが問われやすいです。
今回のようなシンプルなコードを実際に試してみることで、挙動を正確に理解でき、試験でも迷わず解答できるでしょう。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次