手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 PHP CLI の基本設定 – コマンドラインで PHP を使う

Ubuntu 26.04 で PHP を使う場合、Web サーバーから実行される PHP-FPM と、コマンドラインから実行する PHP CLI を分けて考える必要があります。Web アプリケーションの実行、管理コマンド、cron、Composer、Nextcloud の occ などでは、同じ PHP でも使われ方が異なります。

この記事では、Ubuntu 26.04 で PHP CLI を使うための基本を整理します。PHP パッケージ、拡張 module、php.iniphpenmod、PHP-FPM との違いを確認し、CLI 実行環境として破綻しにくい形を作ることを目的にします。

PHP CLI と PHP-FPM は役割が違う

PHP-FPM は Web サーバーから FastCGI 経由で PHP を実行するための仕組みです。一方、PHP CLI は shell、cron、systemd、管理コマンドから PHP を直接実行するためのものです。どちらも PHP ですが、設定ファイル、実行ユーザー、環境変数、タイムアウト、メモリ制限の効き方が変わります。

領域主な用途
PHP CLIphp コマンド、Composer、管理スクリプト、cron、occ
PHP-FPMNginx や Apache から Web リクエストを処理する
共通拡張mbstring、xml、curl、mysql、redis など、CLI と Web の両方で必要になることがある
CLI 設定長時間実行、memory_limit、apc.enable_cli などを意識する
FPM 設定pool、socket、process manager、Web 実行ユーザーを意識する

現在の PHP を確認する

まず、PHP CLI が入っているか、どのバージョンが使われているか、どの設定ファイルを読んでいるかを確認します。

コマンド
php -v
which php
php --ini
php -m

php --ini では、CLI が読み込んでいる php.ini と追加 ini ファイルを確認できます。FPM 側の設定を見ているつもりで CLI の設定を変えていた、またはその逆、という混乱を避けるために最初に確認しておきます。

PHP と拡張 module をインストールする

PHP CLI だけでなく、実際のサーバー運用では拡張 module も必要になります。Nextcloud、WordPress、管理スクリプト、DB 接続、Redis、画像処理などを考えると、PHP 本体だけでは足りないことが多いです。

コマンド
sudo apt update
sudo apt install -y php php-apcu php-bcmath php-bz2 php-cgi php-curl php-enchant php-gd php-gmp php-imagick php-intl php-ldap php-mbstring php-mysql php-pear php-redis php-smbclient php-xml php-zip imagemagick

必要な拡張は用途によって変わります。大事なのは、アプリケーションが要求する PHP module と、CLI で実行する管理コマンドが要求する PHP module を分けずに確認することです。Web では動くのに CLI の管理コマンドだけ失敗する場合、CLI 側で module が読み込まれていないことがあります。

PHP module の読み込みを確認する

拡張 module を導入したら、php -m で CLI から見えているか確認します。Redis、LDAP、MySQL、mbstring、xml などは、アプリケーション管理コマンドでも必要になることがあります。

コマンド
php -m | grep -E 'apcu|curl|gd|intl|ldap|mbstring|mysqli|redis|smbclient|xml|zip'
php -i | grep '^Loaded Configuration File'
php -i | grep '^Scan this dir for additional .ini files'

CLI 用の追加 ini を配置する

サーバーごとの PHP 設定をまとめたい場合、mods-available に追加 ini を配置し、phpenmod で有効化する方法があります。たとえば、my.php.ini のようなファイルを作り、タイムゾーン、アップロードサイズ、メモリ制限、APCu、OPcache、Redis session などをまとめます。

コマンド
sudo tee /etc/php/8.5/mods-available/my.php.ini >/dev/null <<'EOF'
date.timezone = "Asia/Tokyo"
post_max_size = 10G
upload_max_filesize = 10G
memory_limit = 1G
max_input_time = 3600
max_execution_time = 3600
max_input_vars = 2000
apc.enable_cli = 1
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 1
opcache.save_comments = 1
output_buffering = Off
EOF
sudo phpenmod -v 8.5 my.php

PHP のバージョンは環境に合わせます。Ubuntu 26.04 の標準や追加リポジトリの状況によって、実際のディレクトリは /etc/php/8.4/etc/php/8.5 などになります。必ず php -vphp --ini で実環境を確認してから指定します。

CLI と FPM の設定差を確認する

PHP CLI と PHP-FPM は、同じ module を使っていても読み込む設定ファイルの場所が異なります。CLI 側だけを確認して Web 側が動かない、または Web 側だけを確認して cron や管理コマンドが失敗する、という状態を避けるため、両方を確認します。

コマンド
php --ini
php -i | grep '^memory_limit'
php -i | grep '^date.timezone'
systemctl status php8.5-fpm.service

FPM 側は pool 設定、socket、実行ユーザー、service 状態も関係します。この記事では CLI を主語にしていますが、Web アプリケーションを運用する場合は PHP-FPM の記事と合わせて確認する必要があります。

Composer や管理コマンドで使う時の注意

Composer、Nextcloud の occ、WordPress の WP-CLI のようなツールは、PHP CLI を前提に動きます。このとき、実行ユーザー、カレントディレクトリ、環境変数、読み込む PHP module が重要になります。

確認項目見るポイント
実行ユーザーアプリケーション所有ユーザー、Web 実行ユーザー、管理ユーザーを混ぜない
PHP binary/usr/bin/php なのか、別バージョンの PHP なのか
php.iniCLI が読み込む設定と FPM が読み込む設定を分けて確認する
moduleCLI で必要な extension が読み込まれているか確認する
長時間処理memory_limit、max_execution_time、APCu CLI 有効化などを確認する

まとめ

Ubuntu 26.04 で PHP を使う場合、PHP CLI と PHP-FPM を同じものとして扱うとトラブルになります。CLI は管理コマンド、cron、Composer、アプリケーションのメンテナンス処理で使われ、FPM は Web リクエスト処理で使われます。

PHP 本体と拡張 module を導入したうえで、php -vphp --iniphp -m を確認し、追加 ini をどこに置き、どの PHP バージョンで有効化するのかを明確にしておくことが重要です。CLI と FPM の責務を分けておくと、Web アプリケーション運用時の切り分けがかなり楽になります。

参考書籍
参考書籍
Advanced Ubuntu Administration and Management Best Practices

Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

次に読む記事

Ubuntu 26.04 サーバー管理ガイド
Ubuntu 26.04 PHP CLI の基本設定 – コマンドラインで PHP を使う

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る