[PHP] execとsystem関数

ちょっと違う2つの関数出力の違い

$ ls
test1.php test2.php test3.php exec_system.php

exec_system.php

<?php
echo "---- ここから system\n";
system('ls');
echo "\n---- ここから exec\n";
exec('ls', $output);

出力

$ php exec_system.php
---- ここから system
test1.php
test2.php
test3.php
exec_system.php
---- ここから exec
  • system()は外部プログラムの返り値をそのまま出力する
  • exec()は直接出力しない

exec()の引数

exec()の結果は引数があったときにそこに格納される
第一引数:外部プログラム、第二引数:実行結果、第三引数:外部プログラムのステータス

普通に実行が終了する例

exec.php

<?php
exec('ls', $arr, $status);

var_dump($arr);
var_dump($status);
$ php exec.php
array(4) {
  [0]=>
  string(8) "exec.php"
  [1]=>
  string(9) "test1.php"
  [2]=>
  string(9) "test2.php"
  [3]=>
  string(9) "test3.php"
}
int(0)

実行したコマンドが失敗する例

<?php

exec('mkdir /hoge', $arr, $status);

var_dump($arr);
var_dump($status);
$ php exec2.php
mkdir: /hoge: Permission denied
array(0) {
}
int(1)

第三引数に0以外のステータスが入ってくる