シェルコマンドを実行する関数は
・shell_exec() もしくは バッククォート(`)でコマンドを囲む ・passthru() ・system() ・exec() ・popen() ・proc_open()
と6つありますが、
それぞれの違いは
・shell_exec() 「実行結果の出力がテキスト」のコマンドを実行する場合に使用する ・passthru() 「実行結果の出力がバイナリ」のコマンドを実行する場合に使用する ・system() コマンド実行結果のうち最後の一行だけ取得 ・exec() コマンド実行結果を指定した変数へ返す(配列で取得) ・popen() プロセスへのファイルポインタをオープンする ・proc_open() プロセスへの入出力用ファイルポインタを開く
・shell_exec()【コマンド実行結果を全て取得】(スカラーで取得)
・passthru()【コマンド実行結果を直接標準出力へ出力。戻り値はナシ。指定した変数へUnixコマンド実行結果が帰る】
passthru()関数はexec()関数と同様にコマンドを実行します。 引数 return_var を指定した場合、 Unix コマンドのステータスで置換されます。Unix コマンドからの出力がバイナリデータであり、 ブラウザーへ直接返す必要がある場合 passthru()を 使用する必要があります。
・system()【コマンド実行結果のうち最後の一行だけ取得】
・exec()【コマンド実行結果を指定した変数へ返す】(配列で取得)
・popen()【プロセスへのファイルポインタをオープンする】
・proc_open()【プロセスへの入出力用ファイルポインタを開く】
となっています。
また passthru() 、 system() はコマンド実行結果を標準出力(画面)に出力します。
なのでよく使うのは shell_exec(), exec() という事になります。
プログラムの終了コードを調べる必要があるときには exec() を使いましょう。
◆ shell_exec() の使い方
$output = shell_exec('ls -lart'); もしくは $output = `ls -lart`;
◆ exec() の使い方
exec ( コマンド, 出力, 戻り値 );
コマンド:文字列(実行するコマンド)
出力:配列(実行結果を格納する配列)
戻り値:数値(戻り値を格納する変数)
です。
具体的には下記のように記述します。
$command = 'ls -la'; $output = array(); $ret = null; exec( $command, $output, $ret ); print_r( $output );
◆ 標準エラーを取得するには。
shell_exec も exec も、結果を取得するのは標準出力(STDOUT)だけです。
標準エラー(STDERR)を取得するにはコマンドの最後に
2>&1
を追加するとよいでしょう。
例:
$command = 'ls -l'; $output = shell_exec("{$command} 2>&1"); print_r($output);