exec

(PHP 3, PHP 4, PHP 5)

exec -- 外部プログラムを実行します

説明

string exec ( string command [, array &output [, int &return_var]] )

exec()は指定された commandを実行しますが、一切の出力はありま せん。ただ単に、コマンド結果の最後の行を返すだけです。コマンドを実行 し、一切干渉を受けずに直接コマンドから全てのデータを受けとる必要が あるならば、PassThru() 関数を使ってください。

引数outputが存在する場合、指定した配列は、 コマンドからの出力の各行で埋められます。 \nのような行末記号は、この配列には含まれません。 配列に既に何らかの要素が 含まれる場合は、exec()は配列の最後に追加される ことに注意してください。関数が要素を追加することを望まないのなら、 それが exec() に渡される前に、配列の unset()を呼び出してください。

引数return_varが、引数 outputと共に存在する場合、実行したコマンドの ステータスがこの変数に書かれます。

例 1. exec()の例

<?php
// ("whoami" コマンドをパスに有するシステム上で)
// 実行中のphp/httpdプロセスを所有するユーザの名前を出力
echo exec('whoami');
?>

警告

ユーザが入力したデータをこの関数に 渡すことを許可する場合、ユーザが任意のコマンドを実行できるようシステムを欺くことが できないように escapeshellarg() または escapeshellcmd() を適用する必要があります。

注意: この関数を用いてプログラムを開始し、 バックグラウンドで実行させたままにしたい場合、このプログラムの出力をファイル または他の出力ストリームにリダイレクトするようにする必要があります。さもないと、 PHPはプログラム実行終了までにハングしてしまいます。

注意: セーフモード が有効な場合、 safe_mode_exec_dirの中にある実行プログラムのみ実行可能です。 現実的な理由により、現在、実行プログラムへのパスに..を 含めることは許可されていません。

警告

セーフモードが有効な場合、最初のコマンド文字列に続く全ての単語は単一の引数として扱われます。 つまり、echo y | echo x は、echo "y | echo x" となります。

system(), passthru(), popen(), escapeshellcmd() pcntl_exec(), バックティック演算子 も参照ください。