PHP標準機能でディレクトリ毎にPHPの設定変更を行う方法

Shootacean
5 min readSep 28, 2019

PHP標準機能 .user.ini を利用して、ディレクトリ毎にPHP設定を変更する方法をご紹介します。

WebサーバーにApacheを利用している場合は .htaccessファイル でディレクトリ毎にPHP設定を変更することができますが、 Nginx + php-fpm を利用している場合 .htaccessファイル は使用できません。
なので.user.ini を利用します。

PHP公式ドキュメント .user.ini ファイル

検証用のNginx + php-fpm 環境をDockerで構築しています。
※ファイル内容は最後にまとめて記載していますので、ご活用してください。

例として、使用メモリ最大値 memory_limit を変更してみます。

デフォルトのPHP設定を確認する

デフォルトでは、.user.ini というファイルを探すようになっていますが、変更することもできます。

phpinfo user.iniファイル名設定

.user.ini を使用していない状態の設定を確認しておきます。 左側の数値がディレクトリ毎の設定、右側の数値がphp.iniで設定している値です。

phpinfo local value
phpinfo memory_limit

.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 で終了できます。

Originally published at https://shootacean.com on September 28, 2019.

--

--