トップへ(mam-mam.net/)

PHPでシェルスクリプトを実行する方法 主要なコマンド4選

PHPでシェルスクリプトを実行する方法 主要なコマンド4選

PHPにはシェルスクリプトを実行できる関数が複数あり、それぞれ特徴が異なります。
本記事では、代表的な4つのコマンド(shell_exec、バッククォート、execsystem)の使い方を詳しく解説します。
ただし、ユーザー入力データをこれらの関数に渡す場合、不正なコマンド実行を防ぐために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