我们是否需要明确地将 php.ini 的位置传递给 php-fpm?

F21*_*F21 6 php.ini php-fpm upstart

我看到一个奇怪的问题,php.ini如果我php-fpm在启动它时没有明确地将它传递给它,则不会使用它。

这是我正在使用的新贵脚本:

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
Run Code Online (Sandbox Code Playgroud)

如果 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) 
Run Code Online (Sandbox Code Playgroud)

如果我修改 upstart 脚本的最后一行php-fpmphp.ini明确指向:

exec /usr/local/php/sbin/php-fpm --fpm-config /etc/php/php-fpm.conf -c /etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)

然后我们看到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) 
Run Code Online (Sandbox Code Playgroud)

为什么会这样?这是 php-fpm 的怪癖吗?


次要更新:这对于使用 .php 安装的 php5-fpm 似乎也是一个问题apt-get

我通过运行以下命令在 Ubuntu Server 12.04 虚拟机中进行了测试安装:

sudo apt-get install nginx php5-fpm
Run Code Online (Sandbox Code Playgroud)

安装后启动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 
Run Code Online (Sandbox Code Playgroud)

我注意到也没有php.ini加载。但是,如果我转到/etc/php5/fpm,我可以看到 aphp.ini存在。我还检查了 PHP-FPM 的启动脚本,并且-c没有使用该参数将 ini 文件链接到 PHP。这可能会让那些希望 PHP-FPM 自动加载 php.ini 的人感到困惑。

F21*_*F21 1

不,我们在启动时并不明确需要传递该php.ini文件。php-fpm

让我们首先处理php5-fpm使用安装的apt-get。一旦我重新启动服务器,它就php.ini被加载了。这很奇怪,但很有效。

回到我的问题。

请注意,我使用--with-config-file-path=/etc/php/. 该问题是由于在使用时向文件夹添加尾部斜杠引起的--with-config-file-path

就我而言,我跑去make clean清理旧的编译二进制文件。然后我运行configure --with-config-file-path=/etc/php(请注意,该文件夹没有结尾斜杠)。然后makemake install

完成此操作后,您会发现无论我们是否使用开关将其传递给 php-fpm,php.iniin都会自动加载。/etc/php-c