Skip to content

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

Posted on:2019年9月28日 at 00:00

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というファイルを探すようになっていますが、変更することもできます。

Image from Gyazo

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

phpinfoのローカル・マスター列

user.iniのファイル名設定 Before

.user.iniで設定を変更する

PHP設定を変更したいディレクトリ直下に.user.iniファイルを作成します。

; .user.ini
memory_limit = 256M

再度、phpinfoを確認してみると256Mに変更されていることがわかります。

user.iniのファイル名設定 After

まとめ

上記のように.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 で終了できます。