PHP: Файл конфигурации — Manual
Change language: EnglishBrazilian PortugueseChinese (Simplified)FrenchGermanJapaneseRussianSpanishTurkishOther
Submit a Pull Request Report a Bug
Файл конфигурации (php.ini) считывается при запуске PHP. Для версий серверных модулей PHP это происходит только один раз при запуске веб-сервера. Для CGI и CLI версий это происходит при каждом вызове.
Поиск php.ini производится в следующих местах (по порядку поиска):
- По месту расположения модуля SAPI (
PHPIniDir
директива Apache 2,-c
параметр командной строки CGI и CLI) - Переменная среды PHPRC.
- Местоположение файла
php.ini
может быть указано для различных версий PHP.[(HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
. Для 32-разрядного PHP на 64-разрядной Windows[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
. Следующие ключи реестра исследуются при поиске для установок с совпадающей разрядностью:[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z]
,[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y]
и[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x]
, где x, y и z подразумевают major, minor и release версии PHP. Для 32-разрядного PHP на 64-разрядной Windows ключи реестра будут другими:
, [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z][HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y]
и[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x]
.Если также имеется значение
IniFilePath
в любом из этих ключей, то местонахождениеphp.ini
будет определено первым ключом по порядку (только для Windows). -
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
или[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
, значение
(только для Windows). - Текущая директория (исключая CLI).
- Директория веб-сервера (для модулей SAPI) или директория PHP (иначе в Windows).
- В директории Windows (C:\windows или C:\winnt) (для Windows) или
--with-config-file-path
с выбором при компиляции.
Если файл php-SAPI.ini существует (где SAPI — это тип интерфейса, который используется,
например, php-cli.ini или php-apache.ini), то он используется вместо php.
Замечание:
Веб-сервер Apache изменяет текущую директорию на корневую при запуске, в результате чего PHP считывает php.ini из корневой файловой системы, если файл существует.
В php.ini можно использовать переменные окружения, как показано ниже.
Пример #1 Переменные окружения php.ini
; PHP_MEMORY_LIMIT взята из переменных окружения memory_limit = ${PHP_MEMORY_LIMIT}
Директивы php.ini, обрабатываемые модулями, описаны на соответствующих
страницах модулей. Список директив ядра
имеется в приложении. Не все директивы PHP документированы в этом руководстве:
для ознакомления с полным списком директив доступных в вашей версии PHP,
прочитайте комментарии вашего php.ini.
Кроме того, вы можете найти полезной
» последнюю версию php. ini из Git.
Пример #2 Пример php.ini
; любой текст в строке после точки с запятой (;) без кавычек игнорируется [php] ; маркеры разделов (текст в квадратных скобках) также игнорируется ; Могут быть установлены следующие логические значения: ; true, on, yes ; или false, off, no, none register_globals = off track_errors = yes ; вы можете заключать строки в двойные кавычки include_path = ".:/usr/local/lib/php" ; обратный слеш обрабатывается так же, как любые другие символы include_path = ".;c:\php\lib"
Возможно обращаться к существующим ini-переменным из
ini-файлов. Пример: open_basedir = ${open_basedir}
":/new/dir"
.
Сканирование директорий
Существует возможность сконфигурировать PHP для сканирования директорий в поисках .ini-файлов после считывания php.ini. Это можно сделать на моменте компиляции, указав опцию

Можно сканировать несколько директорий, разделяя их разделителем,
используемом в вашей операционной системе (;
в Windows, NetWare
и RISC OS; :
на всех остальных платформах; в PHP есть
константа PATH_SEPARATOR
, которую можно использовать)
Если PHP_INI_SCAN_DIR
В каждой директории PHP сканирует все файлы заканчивающиеся на .ini
в алфавитном порядке. Список всех загруженных файлов в том порядке,
в котором они были загружены, доступен с помощью функции
php_ini_scanned_files(), либо при запуске PHP с опцией —ini.
+add a note
User Contributed Notes 2 notes
up
down
15
weili ¶
1 year ago
For someone who's also wondering.
PHP can work even if there is no configuration file(php.ini) loaded,
it will simply applies the default values to directives.
up
down
-17
ohcc at 163 dot com ¶
6 years ago
in php.ini you can reference to an existing directive or an environment variable using the syntax ${varname}.
Here are some examples.
sys_temp_dir = "${WINDIR}"
--- ${WINDIR} will be replaced by $_ENV['WINDIR'] at runtime
--- you can set environment variables by Apache and use them in php.ini
--- FcgidInitialEnv AUTHOR "WUXIANCHENG"
--- error_log = "${AUTHOR}.log"
error_log = "${sys_temp_dir}"
--- ${sys_temp_dir} will be replace by the value of sys_temp_dir
Also you can use PHP constants in php.ini, but DONT'T wrap them in ${} or "".
error_log = "/data/"PHP_VERSION"/"
--- it works like this php code:
$error_log = "/data/" .
PHP_VERSION . "/";
+add a note
PHP: Список основных опций конфигурации
Change language: EnglishBrazilian PortugueseChinese (Simplified)FrenchGermanJapaneseRussianSpanishTurkishOther
Submit a Pull Request Report a Bug
Ниже приведён частичный список опций конфигурации, используемых скриптами configure при компиляции в Unix-подобных
окружениях. Большинство опций конфигурации приведено в соответствующих
местах на страницах с описанием модулей, а не здесь. Чтобы получить полный
актуальный список опций конфигурации, запустите ./configure —help в каталоге исходного кода PHP после запуска команды autoconf (смотрите также раздел установки PHP).
Вам также может быть интересно почитать документацию команды
» GNU configure для получения
информации о дополнительных опциях команды configure, таких, как
--prefix=PREFIX
.
Замечание:
Эти настройки используются только во время компиляции. Если вы хотите изменить конфигурацию PHP во время выполнения, пожалуйста смотрите главу Конфигурация во время выполнения.
- Разное
- Поведение PHP
- Сервер
Опции конфигурации в PHP
Различные опции
- —enable-debug
Компилировать с информацией об отладке.
Устанавливает, каким образом установленные файлы будут расположены. TYPE принимает значения PHP (по умолчанию) или GNU.
- —with-pear=DIR
Установить PEAR в директорию DIR (по умолчанию PREFIX/lib/php).
- —without-pear
Не устанавливать PEAR.
- —enable-sigchild
Включить собственный дескриптор SIGCHLD для PHP.
- —disable-rpath
Не передавать дополнительные пути для поиска библиотек времени исполнения.
- —enable-libgcc
Явно использовать libgcc.
- —enable-php-streams
Включить экспериментальную функциональность потоков PHP. Используйте только в случае, если вы тестируете код!
- —with-zlib-dir[=DIR]
Определить местонахождение библиотеки zlib.
- —with-tsrm-pthreads
Использовать потоки (threads) POSIX (по умолчанию).
- —enable-shared[=PKGS]
Собирать общие библиотеки [по умолчанию=yes].
- —enable-static[=PKGS]
Собирать статические библиотеки [по умолчанию=yes].
- —enable-fast-install[=PKGS]
Оптимизировать для быстрой установки [по умолчанию=yes].
- —with-gnu-ld
Предполагать, что компилятор С использует линкер GNU ld [по умолчанию=no].
- —disable-libtool-lock
Избегать блокирования (может испортить параллельные сборки).
- —with-pic
Пытаться использовать только PIC/не PIC объекты [по умолчанию=use both (использовать оба)]
- —enable-versioning
Экспортировать только необходимую информацию для отладки.
Смотрите INSTALL для дополнительной информации.
Опции PHP
- —enable-maintainer-mode
Включает правила сборки и зависимости make, неиспользуемые (а иногда запутывающие) в обычном установщике.
- —with-config-file-path=PATH
Устанавливает путь для поиска php.ini, значение по умолчанию
PREFIX/lib
.- —disable-short-tags
Запрещает использование краткой формы записи начального тега <? по умолчанию.
- —with-libdir
Определяет каталог библиотек для сборки PHP в Unix-системах. Для 64-битных систем опция требует особого аргумента
--with-libdir=lib64
для директорииlib64
.- —enable-zts
Включает безопасность потоков. До версии PHP 8.0.0 на системах, отличных от Windows, эта опция называлась —enable-maintainer-zts.
Опции SAPI
Следующий список включает доступные опции SAPI (Server
Application Programming Interface
) для PHP.
- —with-apxs[=FILE]
Собирает динамический модуль для Apache. FILE — это опциональный путь к инструменту «Apache apxs», который используется для apxs по умолчанию. Убедитесь в том, что вы указали версию apxs, которая действительно установлена в вашей системе, а не ту, которая находится в исходниках Apache.
- —with-apache[=DIR]
Собирает статичный модуль для Apache. DIR — это верхний уровень директории сборки Apache, по умолчанию /usr/local/apache.
- —with-mod_charset
Включает таблицы перекодировки для модуля mod_charset (для русской версии Apache).
- —with-apxs2[=FILE]
Собирает динамический модуль для Apache 2.0. FILE — это опциональный путь к инструменту «Apache apxs», который используется для apxs по умолчанию.
- —disable-cli
Отключает сборку CLI-версии PHP (опция также вызывает —without-pear). Больше информации можно получить в разделе Использование PHP в командной строке.
- —enable-phpdbg
Включает поддержку модуля SAPI для интерактивного дебаггера phpdbg.
- —enable-embed[=TYPE]
Включает сборку встроенной библиотеки SAPI.
TYPE может принимать значение
shared
илиstatic
, по умолчанию установленоshared
.- —with-servlet[=DIR]
Включает поддержку сервлетов. DIR — это базовая директория установки JSDK. SAPI требует java-модули, может быть собрана как доступная для dl.
- —disable-cgi
Отключает сборку CGI-версии PHP.
Этот аргумент включает FastCGI, который предварительно должен быть включён аргументом
--enable-fastcgi
.
+add a note
User Contributed Notes 2 notes
up
down
1
atesin () gmail ! com ¶
2 years ago
i'll answer myself (FINALLY!)
current "configure options" can be viewed with "php-config" shell script, aside with other compile time options too =D!!! .
), there is an editor note with additional info about it
up
down
-2
atesin () gmail ! com ¶
2 years ago
please somebody tell me how to display configure options used in php actual binary
it was shown in phpinfo() some years before, it was very useful, specially with 'phpize' recompilation and to enable some pecl/pear module :/
please tell me also which ctriteria had php guys used to suddenly decided to hide (or obfuscate) this info :/
thanks in advance
+add a note
Создание файла конфигурации в PHP
Варианты, которые я вижу с относительными достоинствами и недостатками:
Файловые механизмы
Они требуют, чтобы ваш код искал в определенных местах, чтобы найти файл ini. Это трудная для решения проблема, которая всегда возникает в больших PHP-приложениях. Однако вам, вероятно, потребуется решить проблему, чтобы найти код PHP, который будет включен/повторно использован во время выполнения.
Обычный подход к этому заключается в том, чтобы всегда использовать относительные каталоги или выполнять поиск от текущего каталога вверх, чтобы найти файл с исключительным именем в базовом каталоге приложения.
Распространенными форматами файлов, используемых для файлов конфигурации, являются код PHP, файлы в формате ini, JSON, XML, YAML и сериализованный PHP. обрабатывается через include или require) проанализированный код будет доступен из кеша кода операции, что дает преимущество в производительности.
include_path предоставляет средства для абстрагирования потенциальных местоположений файла, не полагаясь на дополнительный код.
С другой стороны, одной из основных причин отделения конфигурации от кода является разделение ответственности. Он обеспечивает маршрут для внедрения дополнительного кода в среду выполнения.
Если конфигурация создается с помощью инструмента, можно проверить данные в инструменте, но нет стандартной функции экранирования данных для встраивания в код PHP, которая существует для HTML, URL-адресов, операторов MySQL, команд оболочки. …
Серийные данные Это относительно эффективно для небольших объемов конфигурации (примерно до 200 элементов) и позволяет использовать любую структуру данных PHP. Для создания/анализа файла данных требуется очень мало кода (поэтому вместо этого вы можете потратить свои усилия на то, чтобы файл записывался только с соответствующей авторизацией).
Экранирование содержимого, записанного в файл, обрабатывается автоматически.
Поскольку вы можете сериализовать объекты, это создает возможность для вызова кода, просто прочитав файл конфигурации (магический метод __wakeup).
Структурированный файл
Сохранение в виде INI-файла, предложенного Марселем или JSON или XML, также предоставляет простой API-интерфейс для отображения файла в структуру данных PHP (и, за исключением XML, для экранирования данных и создания файл) при устранении уязвимости вызова кода с использованием сериализованных данных PHP.
Производительность будет аналогична сериализованным данным.
Хранилище базы данных
Это лучше всего рассматривать, когда у вас есть огромное количество конфигураций, но вы избирательны в том, что необходимо для текущей задачи. данные из локального экземпляра MySQL, чем десериализовать файл данных.
OTOH это не лучшее место для хранения учетных данных, которые вы используете для подключения к вашей базе данных!
Среда выполнения
Вы можете установить значения в среде выполнения, в которой работает PHP.
Это устраняет необходимость для кода PHP искать в определенном месте конфигурацию. OTOH плохо масштабируется для больших объемов данных, и его трудно универсально изменить во время выполнения.
На клиенте
Одно место для хранения данных конфигурации, которое я не упомянул, находится на клиенте. Опять же, сетевые накладные расходы означают, что это плохо масштабируется для больших объемов конфигурации. А поскольку конечный пользователь имеет контроль над данными, они должны храниться в формате, позволяющем обнаружить любое вмешательство (например, с криптографической подписью), и не должны содержать никакой информации, которая может быть скомпрометирована в результате ее раскрытия (т.
И наоборот, это имеет много преимуществ для хранения конфиденциальной информации, которая принадлежит конечному пользователю — если вы не храните ее на сервере, ее нельзя оттуда украсть.
Сетевые каталоги Еще одно интересное место для хранения информации о конфигурации — это DNS/LDAP. Это будет работать для небольшого количества небольших фрагментов информации, но вам не нужно придерживаться 1-й нормальной формы — рассмотрим, например, SPF.
Инфраструктура поддерживает кэширование, репликацию и распространение. Следовательно, он хорошо работает для очень больших инфраструктур.
Системы управления версиями
Конфигурация, как и код, должна управляться и контролироваться версиями — поэтому получение конфигурации непосредственно из вашей системы VC является жизнеспособным решением. Но часто это приводит к значительным потерям производительности, поэтому может быть целесообразно кэширование.
git — Как мне не зафиксировать мой файл config.

спросил
Изменено 2 года, 2 месяца назад
Просмотрено 533 раза
У меня есть файл config.php на Github, однако у меня есть другой файл config.php на моем ПК. Как я могу заставить Github полностью игнорировать этот файл и сделать так, чтобы он не загружал и не загружал его, когда я делаю новую фиксацию?
Я использую VSCode.
Это действительно раздражает, когда он загружает пароль файла config.php в мое личное хранилище, есть ли решение для этого или я должен просто удалить файл config.php из папки, когда я хочу сделать новый коммит?
- git
- visual-studio-code
Добавьте файл в свой файл .
. Вообще говоря, файлы, которые содержат пароль или конфиденциальную информацию о конфигурации, должны храниться отдельно от вашего основного репозитория git, как для безопасности, так и для того, чтобы разные рабочие станции не переопределяли друг друга. gitignore
Подробнее см. в документации на gitignore.
Поскольку файл ранее находился в репозитории, запустите git rm -r --cached config.php
, чтобы прекратить его отслеживание. Обратите внимание, что этот файл по-прежнему будет присутствовать в прошлых коммитах, поэтому с точки зрения безопасности, если есть какая-либо конфиденциальная информация, вы можете подумать о смене паролей и т. д.
4
Github привязан к git. Было бы сложно (невозможно?) зафиксировать ваш config.php
в git, но не загрузить его вместе со всем, когда вы отправляете свои коммиты на GitHub.
Так что используйте gitignore. Это заставит git полностью игнорировать файл.