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_filesize
post_max_size
memory_limit
display_errors
log_errors
max_execution_time
session.save_path
date.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
ファイルは多くのファイルシステムでは隠しファイル扱いとなるため、ファイルマネージャで隠しファイル表示が必要な場合があります。
ターミナルで以下を実行:
cd /Applications/ServBay/www/myproject/public
touch .user.ini
2
その後、テキストエディタで.user.ini
を開き、1行ごとにPHP設定ディレクティブを追加します。例:
; ファイルアップロード最大容量を20MBに設定
upload_max_filesize = 20M
; PHPスクリプトのメモリ上限を256MBに
memory_limit = 256M
; エラー表示をオン(開発環境のみ推奨)
display_errors = On
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
phpinfo();
?>
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サポートの充実こそ、その理念の象徴です。