4 テスト
まず、www.example1.com サイト用に小さな PHP テストファイルを作成します。例えば次のように配置します:
vi /srv/www/web1/web/info.php
内容は次のとおりです:
ブラウザで http://www.example1.com/info.php を開いてください。問題がなければ出力に CGI/FastCGI が Server API 行に表示されます。
重要: 公開サーバー上で phpinfo() を恒久的に公開するのは情報漏洩リスクになります。検証後は必ずファイルを削除してください。
5 サイトごとのカスタム php.ini
各ウェブサイトは独自の php-fcgi-starter ラッパースクリプトを持てるため、サイト毎に異なる php.ini を割り当てられます。例として /etc/php5/fastcgi/php.ini をコピーして www.example2.com 用に配置します:
cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini
(/srv/www/web2/php.ini を任意に編集できます)
次に php-fcgi スタータを編集して PHPRC を指すようにします:
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
内容は次のように PHPRC を /srv/www/web2/ に設定します:
#!/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 を再起動します:
/etc/init.d/apache2 restart
www.example2.com 用に新しい phpinfo() ファイルを作成します:
vi /srv/www/web2/web/info.php
ブラウザで http://www.example2.com/info.php を確認すると、Loaded Configuration File 行が /srv/www/web2/php.ini を指しているはずです。
6 単一の PHP 設定を変更する
サイト全体の php.ini を置き換える代わりに、php-fcgi-starter 内で PHP 実行時に -d スイッチを付けて単一設定を上書きできます。例えば www.example2.com で 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 を再起動します:
/etc/init.d/apache2 restart
ブラウザで info.php を再確認し、magic_quotes_gpc が Off になっているか確認してください。
7 参考リンク
- mod_fcgid: http://fastcgi.coremail.cn/
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- OpenSUSE: http://www.opensuse.org/
追加解説と実務向けガイド
ファクトボックス — 主要パラメータ
- PHP_FCGI_MAX_REQUESTS: 1 プロセスあたりの最大リクエスト数(例: 5000)
- PHP_FCGI_CHILDREN: 子プロセス数(例: 8)
- PHPRC: PHP が読み込む php.ini のディレクトリを指定
ミニ手順(方法論): サイト別 php.ini を導入するまでの最短手順
- 元の php.ini をコピーしてサイトディレクトリへ配置
- 所有者と権限を適切に設定(例: chown web2:web2)
- php-fcgi-starter の PHPRC をサイトディレクトリへ変更
- Apache を再起動
- phpinfo() で Loaded Configuration File を確認
- 検証後、phpinfo ファイルは削除
役割別チェックリスト
- 開発者:
- php.ini の変更内容を把握し、互換性を確認する
- phpinfo() で期待どおりの設定が反映されているか検証する
- 運用担当:
- サイト専用ファイルの権限と所有者を確認する
- Apache と PHP-FastCGI のログを監視する
- セキュリティ担当:
- phpinfo() は公開環境に残さない
- php.ini で危険な設定(display_errors など)を無効化
失敗例と対処(いつうまくいかないか)
- PHPRC のパスが誤っている: phpinfo() の Loaded Configuration File が期待値と異なる。対処: スタータでの PHPRC 設定とパスの綴りを確認。
- 権限不足で php.ini を読み込めない: Apache ユーザ/Web サイト用ユーザの所有権を確認。
- php-fcgi-starter の実行権限がない: スクリプトに実行ビットがついているか確認(chmod +x)。
代替アプローチ
- .user.ini(PHP-FPM ではなく CGI/FCGI 環境で使える場合あり)や htaccess による一部設定の変更(モジュールや SAPI により可否が異なる)
- PHP-FPM を導入してプール毎に php.ini 相当の設定を行う(より柔軟でパフォーマンス制御しやすい)
セキュリティとプライバシーの注意点
- phpinfo() は機密情報(パス、モジュール、パスワード設定の手がかり)を含むため、本番環境では使用後に必ず削除する。
- サイト専用の php.ini を配置する場合、ファイルの権限は最小限にし、Web から直接アクセスできない場所に置くかディレクトリ一覧を無効化する。
1行用語集
- PHPRC: PHP が起動時に参照する php.ini のディレクトリを指定する環境変数。
- php-fcgi-starter: PHP-CGI を起動するためのラッパースクリプトで、環境変数や追加オプションを設定する場所。
短い判断フロー(Mermaid)
以下は簡易的な導入判断フローです:
graph TD
A[サイト単位で設定を分ける必要があるか?] -->|Yes| B[php.ini をサイトにコピー]
A -->|No| C[スタータで -d オプションで個別設定]
B --> D[PHPRC をサイトに設定して再起動]
C --> D
D --> E[phpinfo'' で確認]
要点のまとめ
- サイトごとに独自 php.ini を使うには PHPRC を設定し、php-fcgi-starter を編集する。変更後は Apache 再起動と phpinfo() による確認が重要です。
- 小さな設定変更は exec の -d オプションで行えるため、全体を置き換える必要はありません。
- phpinfo() は便利だが機密情報を含むため、検証後は削除してセキュリティを保つこと。
重要: 変更を本番サーバーで適用する前にステージング環境で十分に検証してください。