ServBayでの.user.iniファイル使用方法:ローカルPHP設定ガイド
ServBayは、開発者向けに設計された多言語・多技術スタック対応の強力な統合型ローカルWeb開発環境です。柔軟なPHPバージョン管理や便利な設定機能を備えており、プロジェクトごとに異なるPHP設定(ファイルアップロード容量制限、メモリ制限、エラーレベルなど)が求められる場合も少なくありません。グローバルなphp.iniを直接編集すると、すべてのプロジェクトに影響が及ぶため、複数プロジェクト管理には不向きです。
幸い、PHPには.user.iniファイルという仕組みが用意されており、特定ディレクトリおよびそのサブディレクトリにおいて独自のPHP設定を定義できます。グローバルなphp.iniに触れる必要はありません。ServBayは.user.iniを完全サポートしているため、プロジェクト単位やディレクトリ単位でのPHP設定の微調整が簡単・効率的に行えます。
本記事では、.user.iniファイルの仕組み、ServBayでの利用方法、特定プロジェクト向けPHPカスタム設定事例について、分かりやすく解説します。
.user.iniファイルとは
.user.iniファイルはPHP 5.3.0で導入された機能で、従来のWebサーバー設定(例:Apacheの.htaccess)内でphp_valueやphp_flagを使っていたPHPパラメータ設定よりも柔軟かつ安全にディレクトリ単位でPHP設定を行うための方法です。Webアクセス可能なディレクトリ内に.user.iniを配置すると、そのディレクトリおよび配下のサブディレクトリのPHPスクリプトだけに設定内容が反映されます。
主な特徴
- ローカル作用範囲:
.user.iniの設定は、そのディレクトリとサブディレクトリでのみ有効。他のプロジェクトやServBay全体のphp.ini設定には影響しません。 - 高い柔軟性:プロジェクト固有の要件に応じてPHP設定の独立セットを定義可能です。
- 管理が簡単:グローバルなサーバーやPHP設定ファイルを書き換えることなく、設定衝突のリスクも軽減され、各プロジェクトの独立性・移植性が高まります。
- 再起動不要:
php.ini編集時のようにPHP-FPMやWebサーバーの再起動は不要。.user.ini変更は通常、user_ini.cache_ttlで指定された時間(デフォルト300秒=5分)後に自動で反映されます。
設定可能なディレクティブ
すべてのPHP設定ディレクティブが.user.iniで変更できるわけではありません。各ディレクティブの「可変モード(Changeable Modes)」によって、.user.iniで設定できるかどうかが決まります。PHP_INI_USER、PHP_INI_PERDIR、PHP_INI_ALLのいずれかのモードのディレクティブのみが設定可能です。
よく使われる例は以下の通りです:
upload_max_filesizepost_max_sizememory_limitdisplay_errorslog_errorsmax_execution_timesession.save_pathdate.timezone
PHP_INI_SYSTEMモードのディレクティブ(extension_dir, zend_extension, disable_functionsなど)は、.user.iniでは設定できません。これらはメインのphp.iniやWebサーバーの設定ファイルのみで設定可能です。
各ディレクティブの可変モードを確認するには、PHP公式マニュアルの設定ディレクティブ一覧 を参照してください。
ServBayでの.user.ini利用手順
ServBayにおける.user.ini使用手順は非常にシンプルです。ここではupload_max_filesizeとmemory_limitの設定を例に説明します。
たとえば、WebサイトのルートディレクトリがServBayデフォルトの/Applications/ServBay/www/にあり、myprojectというプロジェクトのWebルートが/Applications/ServBay/www/myproject/publicだとします。
ステップ1:対象ディレクトリの特定
まず、カスタムPHP設定を適用したいディレクトリを特定します。通常はWebサーバー向けのルートディレクトリ(例:LaravelやSymfonyの場合はpublicディレクトリ)や、必要に応じて特別な設定が必要なサブディレクトリになります。
例:/Applications/ServBay/www/myproject/public
ステップ2:.user.iniファイルの作成または編集
該当ディレクトリ内に.user.iniファイルを作成します(既存の場合は編集)。なお、先頭がドットの.user.iniファイルは多くのファイルシステムでは隠しファイル扱いとなるため、ファイルマネージャで隠しファイル表示が必要な場合があります。
ターミナルで以下を実行:
bash
cd /Applications/ServBay/www/myproject/public
touch .user.ini1
2
2
その後、テキストエディタで.user.iniを開き、1行ごとにPHP設定ディレクティブを追加します。例:
ini
; ファイルアップロード最大容量を20MBに設定
upload_max_filesize = 20M
; PHPスクリプトのメモリ上限を256MBに
memory_limit = 256M
; エラー表示をオン(開発環境のみ推奨)
display_errors = On1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
編集を保存し、ファイルを閉じます。
ステップ3:設定有効化まで待機または強制リフレッシュ
.user.iniの変更は即座には反映されません。PHPではパフォーマンス向上のためキャッシュされており、user_ini.cache_ttlで指定された時間(デフォルト300秒=5分)後に自動リロードされます。
すぐに反映させたい場合は(ServBayのバージョンや構成によって異なりますが)、以下の方法があります:
- 対象PHP-FPMプロセスの再起動:ServBayアプリで該当PHPバージョンのPHP-FPMサービスを一度停止し再起動します。
- ServBay自体を再起動:最も確実ですが、すべてのローカルサービスが停止・再起動されます。
- キャッシュ期限まで待つ:緊急でなければ、この方法が推奨されます。
ステップ4:.user.ini適用確認
.user.iniの反映を確認するため、簡単なPHPファイルを作成し設定内容を表示します。
.user.iniと同じディレクトリ(例 /Applications/ServBay/www/myproject/public)にinfo.phpというファイルを新規作成し、以下内容を記述します:
php
<?php
phpinfo();
?>1
2
3
2
3
info.phpを保存。
その後、ブラウザでServBayサイト上のinfo.phpにアクセスします。たとえば、プロジェクトの独自ドメインがmyproject.servbay.demoで、info.phpがpublicディレクトリにある場合は、https://myproject.servbay.demo/info.php
のようなURLになります。
開いたphpinfo()のページで、.user.iniで設定したディレクティブ(例:upload_max_filesize, memory_limit, display_errors)を探します。
その項目には「Master Value」と「Local Value」の2列があります。
- Master Value:グローバル
php.iniからの設定値 - Local Value:カレントスクリプトに適用中の値(
.user.iniやWebサーバー設定の結果)
Local Valueが.user.iniで設定した値(例:20M, 256M, Onなど)になっていれば、設定が正しく反映されています。
重要な注意
動作確認後は、必ずinfo.phpファイルを削除またはアクセス制限してください。このファイルはサーバーの詳細な設定情報を公開してしまうため、セキュリティ上非常に危険です。
補足・注意事項
- ファイル名と配置場所:
.user.iniは正確にこの名前で、設定を適用したいディレクトリ内に配置してください。サブディレクトリにも影響します。 - ディレクティブのモード:繰り返しになりますが、すべての設定が
.user.iniで変更できるわけではありません。PHP_INI_SYSTEMモードのものは無効となりエラーにもならない場合があります。 PHP公式マニュアル をご確認ください。 - キャッシュについて:
user_ini.cache_ttl設定に注意。頻繁に.user.iniを変更し即時反映が必要な場合、グローバルphp.iniのuser_ini.cache_ttlを一時的に小さな値(例:user_ini.cache_ttl = 5)に調整することもできます(ただし本番運用では推奨されません)。グローバルphp.ini編集後はPHP-FPM再起動が必要です。 - 優先順位:PHP設定の優先順位は通常
コアデフォルト <php.ini(または追加.ini) < Webサーバー設定(php_value/php_flag) <.user.ini< スクリプト内ini_set()の順です。.user.ini設定はグローバルphp.iniより高く、スクリプトからのini_set()ではさらに上書きされます。 - セキュリティ:
.user.ini自体はWeb公開ディレクトリ内のファイルですが、通常Webから直接ダウンロードできない設定になっていますが、念のため機密情報は記述しないでください。
よくある質問 (FAQ)
Q: .user.ini作成・設定後、反映されません。考えられる原因は?
A:
- ファイル名・配置ミス:必ず
.user.iniという名前・適正ディレクトリであることを確認してください。 - 非サポートディレクティブ:設定変更できない種類のディレクティブ(
PHP_INI_USER/PHP_INI_PERDIR以外)を指定していないか、PHP公式マニュアルでご確認ください。 - キャッシュ未更新:
user_ini.cache_ttl時間(デフォルト5分)経過後またはPHP-FPM再起動、どちらかで再読み込みをお試しください。 - 文法ミス:.user.iniの記述にタイプミス・誤りがないかご確認を。
- 上位設定による上書き:スクリプト内で
ini_set()を使い直接上書きされた場合は.user.iniよりも優先されます。
Q: .user.iniとグローバルphp.iniの違いは?
A:
グローバルphp.iniはPHP全体(インストールごとの全アプリ)に影響し、すべてのスクリプトに対してデフォルト値を設定します(ただし下位優先度設定で上書き可能)。.user.iniは配置ディレクトリおよびサブディレクトリ配下スクリプトのみに作用し、設定できるディレクティブも限定されています。その主な利点は、グローバルを汚染せず、プロジェクトごとにローカルなチューニングができる点です。
まとめ
ServBayで.user.iniを活用すれば、プロジェクトごとのPHP構成管理が非常に柔軟かつ効率的に行えます。他のプロジェクトやServBay全体に影響を与えず、特定プロジェクトの要件に合わせてPHP環境を調整可能です。この記事の手順やサンプルを活用し、ServBayプロジェクトで.user.iniを自在に運用してみてください。ServBayは、開発者のためのパワフルかつ柔軟なローカル開発ツールであることをコンセプトに設計されています。.user.iniサポートの充実こそ、その理念の象徴です。
