アップロードファイルに関するphp.iniの設定をしてApacheを再起動したが設定が反映されていなかった。 PHP-FPMを再起動したことで反映できました。
環境
- PHP 7.3.8
- php.x86_64 7.3.8-1.el7.remi @remi-php73
- CentOS 7.6
- Apache/2.4.6
設定ファイルはデフォルトで/etc/php.ini
にあります。
なぜApacheの再起動でphp.iniが反映されなかったか
Apacheでphpを実行するにはモジュール版とCGI版(含む)のどちらかを使っています。 今回はCGI版であるPHP-FPMを利用していました。
ApacheはPHP-FPMを通してphpを実行しています。 PHP-FPMがphp.iniの設定を読み込んでいなかったため、Apacheを再起動しても設定を読み込めなかったのです。 一方、モジュール版では、Apacheが直接phpを実行しているためApacheの再起動だけで良いようです。
また、Nginxでは基本PHP-FPMを利用するため、同じくPHP-FPMの再起動をすると良いはずです。
PHP-FPMを再起動する
PHP-FPMを再起動してphp.iniの設定変更を反映させます。
# CentOS 7系
# ステータス確認
$ sudo systemctl stutas PHP-FPM
# 再起動
$ sudo systemctl restart PHP-FPM
Apacheの再起動は不要です。PHP-FPMを再起動だけで設定を読み込めます。
CGI、FastCGI、PHP-FPMとは?
nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する - Qiita
私が説明するよりこれを読んだ方が良い。 記事の最後にもリンクを貼ります。
PHP-FPMを利用しているかの確認
phpinfo
phpinfoではServer API
の項にFPM/FastCGI
とあればPHP-FPMを介してPHPを実行している。
Loaded Configuration File
の項にphp.ini
のパスもあります。
Apache conf
Apache2.4.7以降のconfの場合はProxyPassMatch
にPHP-FPMの記述がある。
# PHP-FPM
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/document/root/path/$1
調べて初めて知ったが、この書き方に幾つか問題があるらしい(参考)。
そこで、Apache 2.10からSetHandler
で書けるようになった。
DirectoryIndex index.php index.html
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
参考
- nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する - Qiita
- モジュール版とCGI版の違いは?やFastCGIとは?といった疑問をかなり詳しく解説してくれる!
- せっかくなので、次はこれを読むことをオススメします!
- ApacheでPHP-FPMを動かすなら、ProxyPassMatchではなくSetHandlerを使うのがいいらしい - Qiita
- Ubuntu 14.04 の Apache mod_proxy_fcgi で php 動かすのは厳しい話 - 誰かの役に立てばいいブログ
- Apache 2.10から
SetHandler
で書ける。
- Apache 2.10から