はじめに
本記事は「既存環境を引き継いだときの確認手順」をテーマにしたメモです。
ある案件で、PHP7.4→8.3にすでにバージョンアップ済みのサーバ環境をインフラ担当者から引き継ぎました。
構成はremiリポジトリ+php-fpmです。
引き継ぎ時点で共有されていた情報は、以下のような概要レベルのものでした。
- PHPは8.3で稼働している
- remiリポジトリを使用している
- Webはphp-fpm構成
一方で、
「どのPHPプロセスが、どのphp.iniを読んでいるか」
といった点までは明確になっていませんでした。
引き継ぎ後に設定調整を行おうとしたところ、
- php.iniを修正しても挙動が変わらない
- 設定が初期値に戻っているように見える
という状態に遭遇しました。
この時点では、
「php.iniが正しく引き継がれていないのでは?」
と考えていました。
しかし、実際の原因はまったく別のところにありました。
結論
php.iniが引き継がれていなかったわけではありません。
問題だったのは、自分が編集しているphp.iniが、
実際に稼働しているPHPプロセスが読み込んでいるphp.iniだ
と無意識に思い込んでいたことでした。
引き継ぎ後の環境では、
構成を「知っているつもり」で判断すると簡単にズレます。
まず最初にやるべきだったこと
php-fpmプロセスの確認
振り返ってみて、一番最初にやるべきだったのはphp.iniを探すことではありませんでした。
引き継いだ環境ではまず、
「今、Web側で何が実行されているか」
を事実ベースで確認する必要があります。
$ ps aux | grep php-fpm
ここで確認すべきポイントは以下です。
- php-fpmが起動しているか
- バージョン付きプロセスか(例:php83-fpm)
- 複数バージョンのphp-fpmが同時に動いていないか
出力例(remi環境)
root 1234 php-fpm: master process (/etc/opt/remi/php83/php-fpm.conf)
apache 1235 php-fpm: pool www
この時点で、
Web側はPHP8.3(php83-fpm)で動いている
という事実が確定します。
CLI側のPHPとphp.iniを確認
次に、CLI側のPHPを確認しました。
$ php83 -i | grep "Loaded Configuration File"
Loaded Configuration File => /etc/opt/remi/php83/php.ini
remi環境では、php83のようなバージョン付きバイナリが一般的に使われます。
この結果から、php.iniの実体は
/etc/opt/remi/php83/php.ini
であることが分かります。
何を勘違いしていたのか(本当の原因)
引き継いだ環境では、自分が今見ているphp.iniが、
そのまま実行中のPHPに効いているはずだと思い込んでいたことです。
この勘違いは、PHPやremiに詳しくないから起きたものではありません。
むしろ「構成はだいたい分かっている」という状態だからこそ起きたものだと感じています。
なぜそう思ってしまったのか
設定の場所はだいたい想像がつくだろう
という思い込みがありました。
その結果、
- /etc/php.ini
- /etc/php/*
といった一般的な配置を前提に設定を確認・編集していました。
しかし実際には、Web側ではphp-fpmプロセスが動作しており、
そのphp-fpmが参照しているのは
/etc/opt/remi/php83/php.ini
でした。
まとめ
- 引き継ぎ環境では「分かっているつもり」を一度捨てる
- 設定ファイルを探す前に、まず「何が動いているか」を確認する
- php.iniは推測ではなく、実行中プロセスから特定する