今日の人気記事

  1. 配列を文字列に変換する - implode()
  2. 簡単なPHPスクリプトを動かしてみよう
  3. ファイルから1行ずつ読み込む - fgets()
  4. ユニークなファイル名の一時ファイルを作成 - tempnam()
  5. ヒアドキュメント

外部コマンドを実行 - 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関数は、コマンド実行結果を文字列で出力します。

その他 の人気記事

  1. PHPの設定内容を確認する - phpinfo()
  2. メッセージを出力し、スクリプトを終了 - die()、exit()
  3. スクリプトを一時停止 - sleep()、usleep()

関連記事(一部広告含む)