Назад | Перейти на главную страницу

Нужно ли нам явно передавать местоположение php.ini в php-fpm?

Я вижу странную проблему, когда мой 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 переключатель или нет.