PHPから外部のプログラムを実行する方法について解説します。
シェルによりコマンドを実行し、文字列として出力全体を返します。
string shell_exec ( string $cmd )PHP: shell_exec - Manual
この関数はバッククォート演算子 (backquote operator) のエイリアスです。よって
$output = shell_exec( 'ls -al' );
は、バッククォート (グレイブ アクセント) を用いて
$output = `ls -al`;
のようにも記述できます。なおバッククォート演算子は、バックティック演算子 (backtick operator) または実行演算子 (execution operator) とも呼ばれます。PHP: 実行演算子 - Manual
外部プログラムを実行します。
string exec (
string $command
[, array &$output
[, int &$return_var ]] )
PHP: exec - Manual
| 出力の取得方法 | セーフモードでの実行 | |
|---|---|---|
| shell_exec() | 出力の全体を、戻り値で取得 | 不能 |
| exec() |
|
可能 |
外部プログラムを実行し、未整形の出力を表示します。戻り値はなく、出力は直接ブラウザへ渡されるため、バイナリデータを返すコマンドで使用します。
void passthru (
string $command
[, int &$return_var ] )
PHP: passthru - Manual
外部プログラムを実行し、出力を表示します。
string system (
string $command
[, int &$return_var ] )
PHP: system - Manual
コマンドを実行し、入出力用にファイルポインタを開きます。
resource proc_open (
string $cmd , // 実行するコマンド
array $descriptorspec , // プロセスに渡すデータ
array &$pipes // ファイルポインタの配列
[, string $cwd // コマンドの初期作業ディレクトリ
[, array $env // コマンドの環境変数の配列
[, array $other_options // 追加オプション
]]] )
PHP: proc_open - Manual
不正なコマンドの実行を防止するため、ユーザーからの入力をコマンドに渡すときには、必ず文字列をエスケープします。
コマンドが期待する動作をしないときには、コマンドの後に「2>&1」を追記します。これで標準エラー出力が標準出力へリダイレクトされるため、出力結果でエラーを確認できます。UNIXの部屋 コマンド検索:リダイレクト (*BSD/Linux)
たとえば次のように実行すると、
echo shell_exec( 'command 2>&1' );
次のようにエラーが出力されます。
'command' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。