説明
stringfalse exec(string $command
, array &$output
= null
, int &$result_code
= null
)
パラメータ
-
command
-
実行するコマンド
-
output
-
引数 output
が存在する場合、指定した配列は、
コマンドからの出力の各行で埋められます。
\n
のような後に続く空白は、この配列には含まれません。
配列に既に何らかの要素が
含まれる場合は、exec は配列の最後に追加される
ことに注意してください。関数が要素を追加することを望まないのなら、
それが exec に渡される前に、配列の
unset を呼び出してください。
-
result_code
-
引数result_code
が、引数
output
と共に存在する場合、実行したコマンドの
ステータスがこの変数に書かれます。
戻り値
コマンド結果の最後の行を返します。コマンドを実行し、
一切干渉を受けずに直接コマンドから全てのデータを受けとる必要が
あるならば、passthru 関数を使ってください。
失敗時に false
を返します。
実行されたコマンドの出力を取得するには、必ず output
パラメータを設定・使用してください。
エラー / 例外
exec
が command
を実行できない場合、E_WARNING
が発生します。
command
が空だったり、null バイトが含まれている場合、
ValueError がスローされます。
例
例1 exec の例
<?php
// ("whoami" コマンドをパスに有するシステム上で)
// 実行中のphp/httpdプロセスを所有するユーザーの名前を出力
$output=null;
$retval=null;
exec('whoami', $output, $retval);
echo "Returned with status $retval and output:\n";
print_r($output);
?>
Returned with status 0 and output:
Array
(
[0] => cmb
)
注意
警告ユーザーが入力したデータをこの関数に
渡すことを許可する場合、ユーザーが任意のコマンドを実行できるようシステムを欺くことが
できないように escapeshellarg または
escapeshellcmd を適用する必要があります。
注意:
プログラムがこの関数で始まる場合、
バックグラウンドで処理を続けさせるには、
プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。
そうしないと、プログラムが実行を終えるまで PHP はハングしてしまいます。
注意:
Windowsでは、exec 関数はコマンドを起動するために最初に cmd.exe を起動します。cmd.exe を起動せずに外部プログラムを起動したい場合は、proc_open 関数を bypass_shell
オプションを指定して使うようにしてください。
参考
- system
- passthru
- escapeshellcmd
- pcntl_exec
- バッククォート演算子