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' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。