Как включить файл php.ini в другой файл php.ini?

Как включить файл php.ini в другой файл php.ini?


person Itay Moav -Malimovka    schedule 08.09.2009    source источник
comment
Мне интересно, как RHEL/Fedora выполняет включение /etc/php.d/*. Они исправили PHP, чтобы сделать это возможным?   -  person gahooa    schedule 08.09.2009
comment
@gahooa это вопрос, который привел меня сюда. Вы когда-нибудь узнавали, как они выполняют включение /etc/php.d/*?   -  person Jeff Puckett    schedule 07.09.2016
comment
см. принятый ответ ниже, это тоже отвечает на ваш вопрос. Вы также можете сделать php -i (phpinfo()) и посмотреть, как был построен php   -  person Itay Moav -Malimovka    schedule 07.09.2016


Ответы (7)


Я не думаю, что вы можете «включить» файлы .ini из основного файла php.ini.

Однако одним из возможных решений может быть использование этой опции в строке конфигурации при компиляции PHP:

--with-config-file-scan-dir=PATH                                                        
    Set the path where to scan for configuration files

Если эта опция используется во время компиляции, PHP будет искать каждый файл .ini в этом каталоге в дополнение к «обычному» файлу php.ini.

Я предполагаю, что это то, что используется, например, в Ubuntu, который использует другой файл .ini для каждого загруженного расширения вместо изменения php.ini.

Путь к файлу php.ini, определяемому с помощью этой опции, в строке конфигурации:

--with-config-file-path=PATH                                                            
    Set the path in which to look for php.ini [PREFIX/lib]

Тем не менее, это, вероятно, означает, что вам придется перекомпилировать PHP — что, кстати, не так сложно — самая сложная часть — получить нужные вам зависимости.

И вот сообщение в списке рассылки internals@, в котором говорится то же самое, что и у меня: файлы конфигурации и PHP_CONFIG_FILE_SCAN_DIR

person Pascal MARTIN    schedule 08.09.2009
comment
В дополнение к настройке времени компиляции существует также переменная окружения PHPRC, которая позволяет изменить каталог по умолчанию php.ini (и, возможно, другие ini-файлы). - person Emre Yazici; 29.07.2011
comment
Когда вы говорите в строке конфигурации, что это значит? Это где-то файл? - person tomjung; 13.03.2015

Также можно определить путь в ~/.bashrc

export PHP_INI_SCAN_DIR=/usr/local/lib/php.d
person Martin Zeitler    schedule 17.11.2016
comment
не будет ли это работать только в CLI, а не в httpd - person Maciek Rek; 06.05.2021

Я установил memcached для php и не знал, как убедиться, что его ini был включен в мой php.ini, но, как оказалось, это происходит автоматически. Вы можете проверить, что загружается, запустив php --ini.

php --ini
Configuration File (php.ini) Path: /opt/local/etc/php5
Loaded Configuration File:         (none)
Scan for additional .ini files in: /opt/local/var/db/php5
Additional .ini files parsed:      /opt/local/var/db/php5/memcached.ini
person hockey_dave    schedule 06.03.2012
comment
похоже, что путь к файлу конфигурации, возвращаемый php --ini, возможно, не совпадает с возвращенным с веб-страницы (‹?php phpinfo(); ?›) . - person gonglong; 17.04.2017

На самом деле ВЫ МОЖЕТЕ. Я только что протестировал его на Debian 9 с PHP-FPM. Из какого-нибудь файла .ini/.conf используйте следующий синтаксис:

include=/path/to/special-php.ini

или даже

include=/path/to/special-dir-full-of-conf-files/*.conf 

как это используется в

/etc/php/7.0/fpm/php-fpm.conf
include=/etc/php/7.0/fpm/pool.d/*.conf

Кстати, это будет наиболее полезно, если вы разделите свои настройки по темам или если вам нужен набор для разработки и еще один для производства. Тогда вы можете сделать это в стиле Debian/Apache, например

/etc/php/conf-available/
/etc/php/conf-enabled/

с символикой от второго к другому и включением в этот.

person ondelettes    schedule 15.04.2019
comment
Для меня это работало в php-fpm.conf, но не в php.ini. - person Thomas Rokicki; 09.06.2020

Кажется, вы не можете включить один ini-файл в другой, чтобы на него ссылались и загружали. Но вы можете настроить php для загрузки нескольких файлов, указав, в каких папках искать.

При использовании настройки FastCGI (возможно, и в FPM, хотя я этого точно не знаю) вы можете экспортировать переменные среды из оболочки php.

Там вы можете сделать:

export PHP_INI_SCAN_DIR=/etc/php5/cgi/conf.d:/var/www/mydomain.net/etc

/var/www/mydomain.net/etc — это просто пример, это папка, в которую вы помещаете свои дополнительные ini-файлы. Кажется, это может быть список, разделенный :.

Используйте phpinfo.php (файл с произвольным именем, содержащий только <?php phpinfo();), откройте соответствующий URL-адрес в своем браузере и проверьте список каталогов, которые анализируются, и список загружаемых файлов в его верхней части.

/etc/php5/cgi/conf.d всегда должен быть включен (я думаю, потому что он был скомпилирован в исполняемый файл php) и, возможно, на самом деле не нужен.

person sjas    schedule 30.12.2016

Вы не можете. Читать онлайн-страницы:

Файл конфигурации

РЕЗЮМЕ: Файл конфигурации (php.ini) считывается при запуске PHP. Для версий серверного модуля PHP это происходит только один раз при запуске веб-сервера. Для версии CGI и CLI это происходит при каждом вызове.

файлы .user.ini

РЕЗЮМЕ: В дополнение к основному файлу php.ini, PHP сканирует INI-файлы в каждом каталоге, начиная с каталога запрошенного файла PHP и продвигаясь вверх до текущего корня документа (как указано в $_SERVER['DOCUMENT_ROOT ']). Только настройки INI с режимами PHP_INI_PERDIR и PHP_INI_USER будут распознаваться в файлах INI в стиле .user.ini.

person kv-prajapati    schedule 08.09.2009
comment
Я читал те, прежде чем публиковать, ничего не говорит о том, возможно ли это или нет. - person Itay Moav -Malimovka; 08.09.2009

Вы можете попытаться смоделировать это, используя функцию ini_set. . Но, как указывает «справочная страница», не все параметры ini можно изменить с помощью ini_set. Хотя это определенно полезная функция.

person Stephen    schedule 08.09.2009