外部コマンドを実行 - exec()、system()
当ページのリンクには広告が含まれています。
プログラミング言語PHPで、外部コマンドを実行する関数 exec()、system()を紹介します。
exec()とsystem()は似ている関数(外部コマンドを実行するという点では全く同じ)ですが、exec()は引数に指定したコマンドを実行結果を出力せず、system()はコマンドの実行結果を出力するという点が異なります。
ただ、exec()は実行結果を引数に指定した配列に格納することができるので、実行結果に何かしらの処理を掛ける場合は、こちらのほうが扱いやすいです。
exec関数
string exec ( string $command [, array &$output [, int &$return_var ]] )
引数に指定したコマンド($command)を実行します。コマンドの実行結果を出力しません。
引数 $command 実行するコマンドを指定します。 &$output 変数を指定した場合、コマンドの出力結果を行ごとに配列に格納します。 &$return_var 変数を指定した場合、コマンドのステータスが格納されます。 コマンド実行の成功時には「0」、コマンド実行の失敗時には「1」が格納されます。
返り値
コマンド実行結果の最後の行を返します。
system関数
string system ( string $command [, int &$return_var ] )
引数に指定したコマンド($command)を実行します。コマンドの実行結果を出力します。
引数 $command 実行するコマンドを指定します。 &$return_var 変数を指定した場合、コマンドのステータスが格納されます。 コマンド実行の成功時には「0」、コマンド実行の失敗時には「1」が格納されます。
返り値
コマンド実行結果の最後の行を返します。
サンプルコード
引数に指定したコマンドを実行するサンプルコードです。exec関数とsystem関数の挙動の違いを見てみましょう。
exec( コマンド, 出力配列, コマンドステータス ) system( コマンド, コマンドステータス )
<?php echo "# exec関数\n"; var_dump( exec('ls') ); // 引数なし var_dump( exec('ls', $out, $ret) ); // 引数あり print_r( $out ); var_dump( $ret ); echo "\n# system関数\n"; var_dump( system('ls', $ret) ); var_dump( $ret ); ?>
実行結果です。
# exec関数 string(9) "sleep.php" string(9) "sleep.php" Array ( [0] => define.php [1] => die-exit.php [2] => die-exit2.php [3] => exec.php [4] => sleep.php ) int(0) # system関数 define.php die-exit.php die-exit2.php exec.php sleep.php string(9) "sleep.php" int(0)
exec関数は、コマンド実行結果を出力しません。出力を取得したい場合は、「出力配列」を引数に指定する必要があります。
対して、system関数は、コマンド実行結果を文字列で出力します。