Я вижу странную проблему, когда мой 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
Если PHP запускается с указанным выше, мой php.ini
никогда не используется, даже если он находится в 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)
Если я изменю последнюю строку сценария выскочки, указав 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 были запущены после установки и вроде все нормально. Затем я раскомментировал настройки php в конфигурации nginx и разместил тест 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.ini будет автоматически загружаться PHP-FPM.
Нет, нам не нужно явно передавать php.ini
файл в php-fpm
при запуске.
Давайте сначала разберемся с php5-fpm
установлен с использованием apt-get
. Как только я перезапустил сервер, php.ini
был загружен. Это было странно, но это сработало.
Вернемся к моему вопросу.
Обратите внимание, что я скомпилировал PHP с --with-config-file-path=/etc/php/
. Проблема вызвана добавлением в папку завершающей косой черты при использовании --with-config-file-path
.
В моем случае я побежал make clean
чтобы очистить старые скомпилированные двоичные файлы. Затем я запустил настройку с --with-config-file-path=/etc/php
(обратите внимание, что для папки нет конечной косой черты). затем make
и make install
.
Как только это будет сделано, вы обнаружите, что php.ini
в /etc/php
загружается автоматически, независимо от того, передаем ли мы его в php-fpm с помощью -c
переключатель или нет.