カテゴリ: PHP 更新日: 2026/03/23

PHPのコマンドラインでシェルスクリプトを実行する方法|exec・shell_execをやさしく解説

PHP のシェルスクリプトとの連携(exec, shell_exec)
PHP のシェルスクリプトとの連携(exec, shell_exec)

先生と生徒の会話形式で理解しよう

生徒

「PHPって、画面に文字を表示するだけじゃなくて、パソコンの命令も動かせるんですか?」

先生

「動かせますよ。PHPからシェルスクリプトやコマンドを実行することができます。」

生徒

「シェルスクリプトって、黒い画面で打つあれですよね?難しそうです…」

先生

「大丈夫です。今日は仕組みと使い方を、ゆっくり順番に説明します。」

1. PHPのコマンドラインスクリプトとは?

1. PHPのコマンドラインスクリプトとは?
1. PHPのコマンドラインスクリプトとは?

PHPは、ブラウザで動くイメージが強いですが、実はコマンドラインからも実行できます。コマンドラインとは、キーボードで文字を入力してパソコンに命令を出す画面のことです。Windowsではコマンドプロンプト、LinuxやmacOSではターミナルと呼ばれます。

PHPをコマンドラインで使うと、ファイル操作や自動処理、定期実行などができるようになります。これをPHPのコマンドラインスクリプトと呼びます。

2. シェルスクリプトとは何か

2. シェルスクリプトとは何か
2. シェルスクリプトとは何か

シェルスクリプトとは、コマンドラインで入力する命令を、まとめて書いたファイルのことです。たとえば「ファイル一覧を表示する」「日付を表示する」といった命令を、順番に実行できます。

料理で例えると、シェルスクリプトは「レシピ」です。一つ一つの作業を、決まった順番で実行します。PHPからこのレシピを呼び出すことで、PHPが外部の命令を使えるようになります。

3. exec関数の基本的な使い方

3. exec関数の基本的な使い方
3. exec関数の基本的な使い方

execは、PHPからコマンドを実行するための関数です。実行結果を配列として受け取れるのが特徴です。まずは、とても簡単な例を見てみましょう。


<?php
exec('date', $output);
print_r($output);
?>

この例では、dateというコマンドを実行しています。これは現在の日付と時刻を表示する命令です。実行結果は$outputに保存されます。


Array
(
    [0] => 2026年1月18日
)

4. execで複数行の結果を扱う

4. execで複数行の結果を扱う
4. execで複数行の結果を扱う

コマンドによっては、結果が複数行になることがあります。たとえば、ファイルの一覧を表示する場合です。execは、1行ずつ配列に入れてくれます。


<?php
exec('ls', $files);
foreach ($files as $file) {
    echo $file . PHP_EOL;
}
?>

このように、配列として扱えるので、PHPの繰り返し処理と組み合わせると便利です。

5. shell_exec関数の特徴

5. shell_exec関数の特徴
5. shell_exec関数の特徴

shell_execも、コマンドを実行するための関数です。こちらは、実行結果を文字列としてまとめて受け取ります。文章として結果を表示したいときに向いています。


<?php
$result = shell_exec('whoami');
echo $result;
?>

whoamiは、現在のユーザー名を表示するコマンドです。結果がそのまま文字列で返ってきます。

6. execとshell_execの違い

6. execとshell_execの違い
6. execとshell_execの違い

execshell_execは似ていますが、使いどころが違います。execは配列で結果を扱いたいとき、shell_execは文章として結果を使いたいときに便利です。

初心者のうちは、「行ごとに処理したいならexec」「そのまま表示したいならshell_exec」と覚えると理解しやすくなります。

7. PHPからシェルスクリプトファイルを実行する

7. PHPからシェルスクリプトファイルを実行する
7. PHPからシェルスクリプトファイルを実行する

コマンドだけでなく、シェルスクリプトのファイルも実行できます。たとえば、sample.shというファイルを実行する場合です。


<?php
$output = shell_exec('sh sample.sh');
echo $output;
?>

このように書くことで、PHPから外部の処理をまとめて実行できます。バックアップ処理やログ整理などによく使われます。

8. セキュリティ面での注意点

8. セキュリティ面での注意点
8. セキュリティ面での注意点

PHPからコマンドを実行できるということは、とても強力ですが、同時に注意も必要です。外部から受け取った文字を、そのままコマンドに使うと、意図しない命令が実行される危険があります。

初心者のうちは、「決められたコマンドだけを実行する」「入力値を直接使わない」という意識を持つことが大切です。安全に使うことで、PHPとシェルの連携はとても便利な道具になります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
New2
PHP
PHP のセッションをファイルではなくデータベースに保存する方法
New3
PHP
PHPのコマンドラインでシェルスクリプトを実行する方法|exec・shell_execをやさしく解説
New4
Python
Pythonの辞書とは?基本の作成・追加・更新・削除方法を解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.2
Java&Spring記事人気No2
Python
Pythonのloggingモジュール入門!初心者でもできるエラーログの記録方法をやさしく解説
No.3
Java&Spring記事人気No3
PHP
PHPとは?初心者向けにわかりやすく解説
No.4
Java&Spring記事人気No4
PHP
PHP の基本構文(開始タグ・コメント・インデント)を完全ガイド!初心者向け解説
No.5
Java&Spring記事人気No5
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.6
Java&Spring記事人気No6
Python
Pythonのタプルをforループで処理する方法(アンパック)
No.7
Java&Spring記事人気No7
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.8
Java&Spring記事人気No8
Python
Pythonで日付を比較する方法を解説!初心者でもわかるdatetimeの使い方