PHP標準機能でディレクトリ毎にPHPの設定変更を行う方法
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 で終了できます。