PHPでシェルスクリプトを実行する方法 主要なコマンド4選
PHPにはシェルスクリプトを実行できる関数が複数あり、それぞれ特徴が異なります。
本記事では、代表的な4つのコマンド(shell_exec
、バッククォート、exec
、system
)の使い方を詳しく解説します。
ただし、ユーザー入力データをこれらの関数に渡す場合、不正なコマンド実行を防ぐためにescapeshellarg()
や escapeshellcmd()
を適用して安全に実行する必要があります。
- shell_exec(string $command): string | false | null;
-
シェルコマンドを実行し文字列として出力全体を返す
<?php $output = shell_exec("ls -al"); echo $output;
合計 8 drwxr-xr-x 2 mam user 41 5月 13 12:22 . drwx------ 7 mam user 193 5月 13 12:22 .. -rw-r--r-- 1 mam user 53 5月 13 12:22 command.php -rw-r--r-- 1 mam user 1824 4月 9 13:48 test.php
- バッククォート演算子 を使う方法 `command`;
-
シェルコマンドを実行し文字列として出力全体を返す
<?php $output = `ls -al`; echo $output;
合計 8 drwxr-xr-x 2 mam user 41 5月 13 12:22 . drwx------ 7 mam user 193 5月 13 12:22 .. -rw-r--r-- 1 mam user 53 5月 13 12:22 command.php -rw-r--r-- 1 mam user 1824 4月 9 13:48 test.php
-
exec(string $command, array &$output = null, int &$result_code = null): string|false;
-
$output:出力全体を配列として返す
$result_code:ステータスコードを返す
戻り値:出力の最後の行を返し、失敗時はfalseを返す<?php $result = exec("ls -al", $output, $result_code); var_dump($output); echo "\n"; echo $result_code."\n"; echo $result."\n";
array(5) { [0]=> string(8) "合計 8" [1]=> string(48) "drwxr-xr-x 2 mam user 41 5月 13 12:35 ." [2]=> string(49) "drwx------ 7 mam user 193 5月 13 12:35 .." [3]=> string(58) "-rw-r--r-- 1 mam user 129 5月 13 12:35 command.php" [4]=> string(55) "-rw-r--r-- 1 mam user 1824 4月 9 13:48 test.php" } 0 -rw-r--r-- 1 mam user 1824 4月 9 13:48 test.php
- system(string $command, int &$result_code = null): string | false;
-
コマンドを実行し結果を出力します。
$result_code:ステータスコードを返す
戻り値:出力の最後の行を返し、失敗時はfalseを返す<?php $result = system("ls -al", $result_code); echo "\n"; echo $result_code."\n"; echo $result."\n";
合計 8 drwxr-xr-x 2 mam user 41 5月 13 12:45 . drwx------ 7 mam user 193 5月 13 12:45 .. -rw-r--r-- 1 mam user 103 5月 13 12:45 command.php -rw-r--r-- 1 mam user 1824 4月 9 13:48 test.php 0 -rw-r--r-- 1 mam user 1824 4月 9 13:48 test.php
- passthru(string $command, int &$result_code = null): ?false;
-
コマンドを実行し結果を見整形で出力します。
$result_code:ステータスコードを返す
戻り値:成功するとnull、失敗時はfalseを返す<?php $result = passthru("ls -al", $result_code); echo "\n"; echo $result_code."\n"; echo $result."\n";
合計 8 drwxr-xr-x 2 mam user 41 5月 13 12:45 . drwx------ 7 mam user 193 5月 13 12:45 .. -rw-r--r-- 1 mam user 103 5月 13 12:45 command.php -rw-r--r-- 1 mam user 1824 4月 9 13:48 test.php 0