我看到一个奇怪的问题,如果我在启动时php.ini
没有明确地将它传递给它,那么它就不会被使用。php-fpm
这是我正在使用的 upstart 脚本:
start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [016]
pre-start script
mkdir -p /run/php
end script
expect fork
respawn
exec /usr/local/php/sbin/php-fpm --fpm-config /etc/php/php-fpm.conf
如果 PHP 以上述方式启动,则php.ini
永远不会使用 my,即使它在 中Configuration File (php.ini) Path
。
这是相关部分phpinfo()
:
Configuration File (php.ini) Path /etc/php/
Loaded Configuration File (none)
Scan this dir for additional .ini files (none)
Additional .ini files parsed (none)
如果我修改 upstart 脚本的最后一行以明确php-fpm
指向 php.ini
:
exec /usr/local/php/sbin/php-fpm --fpm-config /etc/php/php-fpm.conf -c /etc/php/php.ini
然后我们看到已经php.ini
加载了:
Configuration File (php.ini) Path /etc/php/
Loaded Configuration File /etc/php/php.ini
Scan this dir for additional .ini files (none)
Additional .ini files parsed (none)
为什么会这样?这是 php-fpm 的一个怪癖吗?
小更新:对于使用 安装的 php5-fpm,这似乎也是一个问题apt-get
。
我在 Ubuntu Server 12.04 虚拟机中通过运行以下命令进行了测试安装:
sudo apt-get install nginx php5-fpm
安装后启动了 PHP-FPM 和 nginx,一切似乎都很好。然后我在 nginx 的配置中取消注释了 php 的设置,并放置了一个测试phpinfo()
文件来检查 PHP 的设置。
相关部分是:
Configuration File (php.ini) Path /etc/php5/fpm
Loaded Configuration File (none)
Scan this dir for additional .ini files /etc/php5/fpm/conf.d
Additional .ini files parsed /etc/php5/fpm/conf.d/10-pdo.ini
我注意到也没有php.ini
加载任何内容。但是,如果我转到/etc/php5/fpm
,我可以看到存在一个php.ini
。我还检查了 PHP-FPM 的启动脚本,并且-c
没有使用该参数将 ini 文件链接到 PHP。这可能会让那些希望 PHP-FPM 自动加载 php.ini 的人感到困惑。
答案1
不,我们不需要在启动时明确传递php.ini
文件。php-fpm
让我们首先处理php5-fpm
使用 进行安装apt-get
。一旦我重新启动服务器,php.ini
就会加载。这很奇怪,但它确实有效。
回到我的问题。
注意,我是用 编译 PHP 的--with-config-file-path=/etc/php/
。出现此问题是由于在使用 时在文件夹中添加了尾部斜杠所致--with-config-file-path
。
就我而言,我运行make clean
来清除旧的编译二进制文件。然后我运行 configure --with-config-file-path=/etc/php
(请注意,文件夹末尾没有斜杠)。然后make
和make install
。
完成后,您会发现php.ini
in/etc/php
已被自动加载,无论我们是否使用-c
开关将其传递给 php-fpm。