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
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 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 . "/"; in php.ini you can reference to an existing directive or an environment variable using the syntax ${varname}.
--- FcgidInitialEnv AUTHOR "WUXIANCHENG"
--- error_log = "${AUTHOR}.log"
+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, таких, как
.
Замечание:
Эти настройки используются только во время компиляции. Если вы хотите изменить конфигурацию 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
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 i'll answer myself (FINALLY!)
up
down
-2
atesin () gmail ! com ¶
2 years ago
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 please somebody tell me how to display configure options used in php actual binary
+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.
php (полностью игнорировать его, не загружать и не загружать) в Github при использовании VSCode?спросил
Изменено 2 года, 2 месяца назад
Просмотрено 533 раза
У меня есть файл config.php на Github, однако у меня есть другой файл config.php на моем ПК. Как я могу заставить Github полностью игнорировать этот файл и сделать так, чтобы он не загружал и не загружал его, когда я делаю новую фиксацию?
Я использую VSCode.
Это действительно раздражает, когда он загружает пароль файла config.php в мое личное хранилище, есть ли решение для этого или я должен просто удалить файл config.php из папки, когда я хочу сделать новый коммит?
- git
- visual-studio-code
Добавьте файл в свой файл . gitignore
. Вообще говоря, файлы, которые содержат пароль или конфиденциальную информацию о конфигурации, должны храниться отдельно от вашего основного репозитория git, как для безопасности, так и для того, чтобы разные рабочие станции не переопределяли друг друга.
Подробнее см. в документации на gitignore.
Поскольку файл ранее находился в репозитории, запустите git rm -r --cached config.php
, чтобы прекратить его отслеживание. Обратите внимание, что этот файл по-прежнему будет присутствовать в прошлых коммитах, поэтому с точки зрения безопасности, если есть какая-либо конфиденциальная информация, вы можете подумать о смене паролей и т. д.
4
Github привязан к git. Было бы сложно (невозможно?) зафиксировать ваш config.php
в git, но не загрузить его вместе со всем, когда вы отправляете свои коммиты на GitHub.
Так что используйте gitignore. Это заставит git полностью игнорировать файл.