php.iniの正しい設置場所をあらためて確認する

OS: Ubuntu Server 16.04
Nginx 1.12.2
PHP 7.2.3

Nginxが稼働する環境へPHPをインストールするとなればNginx 1.4.x on Unix systemsの手続きを参照するのは無理からぬ事である。公式であるから全幅の信頼を寄せて盲目的に従うのもやはり無理からぬ事である。これが裏目に出た。第四番目の手続きである。

4. Obtain and move configuration files to their correct locations
cp php.ini-development /usr/local/php/php.ini

php.iniを/usr/local/php/へと配したのちに、OPcacheを有効にすべくphp.iniへ必要な記述をこなしてphp -vを実行するとこうである。

$ php -v
PHP 7.2.3 (cli) (built: Mar 17 2018 01:31:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

「with Zend OPcache v7.2.3, Copyright (c) 1999-2018, by Zend Technologies」が出力に表れないのでOPcacheが有効になっていない模様である。テストスクリプトの実行結果も「PHP Fatal error: Uncaught Error: Call to undefined function opcache_get_status()」とあるからまったく狼狽した。いくらインターネットのページを繰っても似たような状況に遭遇した人が見当たらないのでどうやら世界ではじめて犯したヘマである。情けない。さんざ調べた末、結局はphp.iniの設置場所が良くないようで/usr/local/libへと移動させることで解決を見た。

$ sudo mv /usr/local/php/php.ini /usr/local/lib/
$ php -v
PHP 7.2.3 (cli) (built: Mar 17 2018 01:31:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.3, Copyright (c) 1999-2018, by Zend Technologies

configureのヘルプからも特別に指定しなければ/usr/local/libにphp.iniを求めにゆくことが明らかである。

$ ./configure --help
(snip)
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --with-config-file-path=PATH
                          Set the path in which to look for php.ini [PREFIX/lib]

またphp -iの実行結果から現在の設定を確かめることができるから、php.iniの設定が反映されずどうも様子がおかしいと感ずるときは確認をするのが良さそうである。

$ php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini

参考:
Nginx 1.4.x on Unix systems