PHPプログラムに関する各種メモ書き

PHPからunixシェルコマンドを実行しその結果を取得する。

シェルコマンドを実行する関数は

・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);
No.443
01/18 11:34

edit