PHPのコマンドラインでシェルスクリプトを実行する方法|exec・shell_execをやさしく解説
生徒
「PHPって、画面に文字を表示するだけじゃなくて、パソコンの命令も動かせるんですか?」
先生
「動かせますよ。PHPからシェルスクリプトやコマンドを実行することができます。」
生徒
「シェルスクリプトって、黒い画面で打つあれですよね?難しそうです…」
先生
「大丈夫です。今日は仕組みと使い方を、ゆっくり順番に説明します。」
1. PHPのコマンドラインスクリプトとは?
PHPは、ブラウザで動くイメージが強いですが、実はコマンドラインからも実行できます。コマンドラインとは、キーボードで文字を入力してパソコンに命令を出す画面のことです。Windowsではコマンドプロンプト、LinuxやmacOSではターミナルと呼ばれます。
PHPをコマンドラインで使うと、ファイル操作や自動処理、定期実行などができるようになります。これをPHPのコマンドラインスクリプトと呼びます。
2. シェルスクリプトとは何か
シェルスクリプトとは、コマンドラインで入力する命令を、まとめて書いたファイルのことです。たとえば「ファイル一覧を表示する」「日付を表示する」といった命令を、順番に実行できます。
料理で例えると、シェルスクリプトは「レシピ」です。一つ一つの作業を、決まった順番で実行します。PHPからこのレシピを呼び出すことで、PHPが外部の命令を使えるようになります。
3. exec関数の基本的な使い方
execは、PHPからコマンドを実行するための関数です。実行結果を配列として受け取れるのが特徴です。まずは、とても簡単な例を見てみましょう。
<?php
exec('date', $output);
print_r($output);
?>
この例では、dateというコマンドを実行しています。これは現在の日付と時刻を表示する命令です。実行結果は$outputに保存されます。
Array
(
[0] => 2026年1月18日
)
4. execで複数行の結果を扱う
コマンドによっては、結果が複数行になることがあります。たとえば、ファイルの一覧を表示する場合です。execは、1行ずつ配列に入れてくれます。
<?php
exec('ls', $files);
foreach ($files as $file) {
echo $file . PHP_EOL;
}
?>
このように、配列として扱えるので、PHPの繰り返し処理と組み合わせると便利です。
5. shell_exec関数の特徴
shell_execも、コマンドを実行するための関数です。こちらは、実行結果を文字列としてまとめて受け取ります。文章として結果を表示したいときに向いています。
<?php
$result = shell_exec('whoami');
echo $result;
?>
whoamiは、現在のユーザー名を表示するコマンドです。結果がそのまま文字列で返ってきます。
6. execとshell_execの違い
execとshell_execは似ていますが、使いどころが違います。execは配列で結果を扱いたいとき、shell_execは文章として結果を使いたいときに便利です。
初心者のうちは、「行ごとに処理したいならexec」「そのまま表示したいならshell_exec」と覚えると理解しやすくなります。
7. PHPからシェルスクリプトファイルを実行する
コマンドだけでなく、シェルスクリプトのファイルも実行できます。たとえば、sample.shというファイルを実行する場合です。
<?php
$output = shell_exec('sh sample.sh');
echo $output;
?>
このように書くことで、PHPから外部の処理をまとめて実行できます。バックアップ処理やログ整理などによく使われます。
8. セキュリティ面での注意点
PHPからコマンドを実行できるということは、とても強力ですが、同時に注意も必要です。外部から受け取った文字を、そのままコマンドに使うと、意図しない命令が実行される危険があります。
初心者のうちは、「決められたコマンドだけを実行する」「入力値を直接使わない」という意識を持つことが大切です。安全に使うことで、PHPとシェルの連携はとても便利な道具になります。