PHP標準機能 .user.ini
を利用して、ディレクトリ毎にPHP設定を変更する方法をご紹介します。
WebサーバーにApacheを利用している場合は .htaccessファイル でディレクトリ毎にPHP設定を変更することができますが、
Nginx + php-fpm を利用している場合 .htaccessファイル は使用できません。
なので.user.ini
を利用します。
検証用のNginx + php-fpm 環境をDockerで構築しています。
※ファイル内容は最後にまとめて記載していますので、ご活用してください。
例として、使用メモリ最大値memory_limit
を変更してみます。
デフォルトのPHP設定を確認する
デフォルトでは、.user.ini
というファイルを探すようになっていますが、変更することもできます。
.user.ini
を使用していない状態の設定を確認しておきます。
左側の数値がディレクトリ毎の設定、右側の数値がphp.iniで設定している値です。
.user.iniで設定を変更する
PHP設定を変更したいディレクトリ直下に.user.ini
ファイルを作成します。
; .user.ini
memory_limit = 256M
再度、phpinfoを確認してみると256M
に変更されていることがわかります。
まとめ
上記のように.user.ini
を利用することで、Nginx + php-fpm環境でもディレクトリ毎にPHP設定を変更することができます。
私が実際に行った例としては、
AWS上に構築した EC2 AutoScalingGroup + CodeDeploy(Blue/Green) という環境に対してCakePHPプロジェクトをデプロイする必要があり、
デプロイソースに.user.ini
を含めることで、ディレクトリ毎のPHP設定変更を実現しました。
PHPファイル内でini_set()
を行うよりも.user.ini
を使うほうが設定の見通しがよくなるので、.user.ini
を積極的に使うべきだと思います。
検証で利用したDocker構成
ディレクトリ構成
$ tree -a
.
├── code
│ ├── .user.ini
│ └── index.php
├── docker-compose.yml
└── nginx.conf
ファイル内容
./code/.user.ini
memory_limit = 256M
./code/index.php
<?php
phpinfo();
./docker-compose.yml
version: "3"
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- "./nginx.conf:/etc/nginx/conf.d/default.conf"
- ./code:/code
depends_on:
- php
links:
- php
php:
image: php:7-fpm-alpine
volumes:
- ./code:/code
./nginx.conf
server {
listen 80;
root /code;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}
Docker起動方法
$ docker-compose up
# localhsot:8080でアクセスできます。
# ctrl + C で終了できます。