PHP FastCGI とサイト別 php.ini の設定とテスト
テスト手順
まずは簡単な PHP テストをサイトに置いて、FastCGI 経由で動作しているか確認します。以下は例です。
vi /srv/www/web1/web/info.phpコード内容は次の通りです。
ブラウザで次を開きます: http://www.example1.com/info.php
期待する表示: Server API 行に “CGI/FastCGI” が含まれていること。

重要: テストファイルは公開ディレクトリに置かれるため、運用サーバーではアクセス制限をかけるか、テスト終了後に削除してください。
サイトごとの php.ini を使う理由
1つのサーバーで複数サイトを運用する場合、サイトごとに異なる PHP 設定(例: メモリ制限、拡張モジュール、エラーログ出力)を使いたいことがあります。php-fcgi のラッパースクリプトをサイト単位に用意すれば、PHPRC 環境変数で php.ini の読み込み先を変えられます。
手順の例。
cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini次に、サイト用の php-fcgi-starter スクリプトを編集します。
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starterスクリプト内で PHPRC をサイトのディレクトリに設定します。
#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi設定変更後は Apache を再起動します。
systemctl restart apache2.servicewww.example2.com に同様の info.php を作成し、ブラウザで開いてください。Loaded Configuration File 行に /srv/www/web2/php.ini が表示されれば成功です。

単一の PHP 設定だけを変更する方法
全体の php.ini を差し替える代わりに、php-cgi 実行時に -d オプションで個別設定を上書きできます。これは軽微なチューニングに便利です。
例: magic_quotes_gpc を無効化する場合。
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starterスクリプトを次のように変更します。
#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi -d magic_quotes_gpc=off変更後は必ず Apache を再起動します。
systemctl restart apache2.serviceブラウザで info.php を再読み込みし、magic_quotes_gpc の値が Off になっていることを確認してください。

確認とトラブルシューティング
チェックリスト:
- phpinfo() に Server API が CGI/FastCGI と表示されているか。
- Loaded Configuration File が期待する php.ini を指しているか。
- Apache を再起動後に変更が反映されるか。
- 権限: php.ini とそのディレクトリに PHP 実行ユーザーがアクセスできるか。
- SELinux/AppArmor を使用している場合はポリシーが新しいパスを許可しているか。
よくある問題と対処:
- 表示が古い/反映されない: Apache の再起動が漏れていないか確認。php-fpm ではなく php-cgi を使っていると、デーモン再起動が必要な場合がある。
- パーミッションエラー: php.ini の所有権とパーミッションを見直す。一般的に root が所有し、ウェブユーザーが読み取り可能なら十分。
- 指定した php.ini が読み込まれない: PHPRC のパス末尾にスラッシュを付ける/外すで挙動が変わることがあるため、両方を試す。
制約と失敗するケース:
- PHP のモジュールがビルド時にシステム全体に固定されている場合、php.ini だけでは変更できない設定がある。
- 古い PHP バージョンやディストリビューション固有のパッケージ管理があると、期待通りに動作しないことがある。
代替アプローチ
- php-fpm を使う: サイトごとにプールを作り、php_admin_value で設定を固定できます。スケーラビリティや管理性の面で有利です。
- Docker コンテナ: サイトごとに異なる PHP コンテナを用意すると、完全に独立したランタイムを提供できます。
- .user.ini や ini_set(): 一部の設定は .user.ini またはランタイムで変更可能ですが、すべての設定に対応するわけではありません。
運用チェックリスト(役割別)
管理者(Sysadmin):
- 各サイトの php-fcgi-starter をソース管理に入れる。
- php.ini の変更履歴を残す。
- Apache と PHP のアップデートをテスト環境で検証する。
開発者(Developer):
- 本番にデプロイする前に phpinfo() を使った設定確認を行う。
- セキュリティ設定(display_errors, expose_php など)をサイト用 php.ini で固定する。
運用(Ops):
- テスト用 info.php は運用監視が済んだら削除する。
- 変更時は影響範囲をドキュメント化する(ログ設定、メモリ制限など)。
ミニ方法論: サイト別設定を導入する簡易手順
- テストサイトで手順を検証する。
- 元の php.ini をコピーし、サイト用に調整する。
- php-fcgi-starter で PHPRC を設定または -d オプションを追加する。
- Apache を再起動し、phpinfo() で検証する。
- 変更をバージョン管理し、ロールアウト計画を作る。
簡易用語集(1 行)
- PHPRC: PHP が参照する php.ini のディレクトリを示す環境変数。
- php-cgi: CGI 互換インターフェースで PHP を実行するバイナリ。
- php-fpm: FastCGI のプロセスマネージャ。高負荷向けの代替手段。
まとめ
サイトごとに php.ini を分けることで、柔軟に PHP 設定を管理できます。個別設定は PHPRC を使うか、php-cgi の -d オプションで上書きします。運用時は権限、再起動、セキュリティの確認を忘れないでください。
参考リンク
- mod_fcgid: http://fastcgi.coremail.cn/
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- OpenSUSE: http://www.opensuse.org/