PHP: полный мануал с примерами, функциями и ООП
Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Дерево руководства
Глава 464 · Официальная база → практическое применение
Отладка и конфигурация PHP: configure, php.ini и фактический SAPI
Как отличить параметр сборки, директиву runtime и локальную диагностику и проверить изменение в нужном процессе.
Отладка PHP: карта возможностей
Отладка начинается с наблюдаемого симптома: входные данные, ветка выполнения, исключение, stderr и состояние зависимости. Выводить секреты посетителю нельзя; локальная диагностика, журнал и debugger решают разные задачи.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
Что именно проверять при отладке
Отладка начинается с наблюдаемого симптома: входные данные, ветка выполнения, исключение, stderr и состояние зависимости. Выводить секреты посетителю нельзя; локальная диагностика, журнал и debugger решают разные задачи.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
<?php
echo PHP_SAPI === 'cli' ? "Диагностика CLI\n" : "Диагностика веб-SAPI\n";
Ожидаемый результат
Диагностика CLI
Пример выполнен из CLI. Тот же файл через FPM может загрузить другой php.ini и набор расширений, поэтому CLI-проверка не доказывает настройки сайта.
Параметры configure: как читать сборку PHP
Параметр configure относится к сборке интерпретатора, а не к поведению одного запроса. На готовом сервере сначала выясняют источник пакета и вывод php -i; пересборка нужна лишь там, где этим действительно управляет команда.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
Параметры сборки ядра PHP
Параметр configure относится к сборке интерпретатора, а не к поведению одного запроса. На готовом сервере сначала выясняют источник пакета и вывод php -i; пересборка нужна лишь там, где этим действительно управляет команда.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Ниже приведён частичный список опций конфигурации, используемых скриптами
configure при компиляции в Unix-подобных
окружениях. Большинство опций конфигурации приведено в соответствующих
местах на страницах с описанием модулей, а не здесь. Чтобы получить полный
актуальный список опций конфигурации, запустите ./configure --help
в каталоге исходного кода PHP после запуска команды autoconf
(смотрите также раздел установки PHP).
Вам также может быть интересно почитать документацию команды
» GNU configure для получения
информации о дополнительных опциях команды configure, таких, как
--prefix=PREFIX.
Замечание:
Эти настройки используются только во время компиляции. Если вы хотите изменить конфигурацию PHP во время выполнения, пожалуйста смотрите главу Конфигурация во время выполнения.
Опции конфигурации в PHP
Различные опции
- --enable-debug
Компилировать с информацией об отладке.
- --with-layout=TYPE
Устанавливает, каким образом установленные файлы будут расположены. TYPE принимает значения PHP (по умолчанию) или GNU. Обратите внимание, что при установке manpages под PREFIX (по умолчанию) следует выбрать стиль GNU, чтобы они были найдены в пути поиска утилиты manpath.
- --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.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
Below is a partial list of configure options used by the PHP
configure scripts when compiling in Unix-like
environments. Most configure options are listed in their appropriate
locations on the extension reference pages and not here. For a complete
up-to-date list of configure options, run ./configure --help
in your PHP source directory after running autoconf
(see also the Installation chapter).
You may also be interested in reading the
» GNU configure documentation for
information on additional configure options such as
--prefix=PREFIX.
Note:
These are only used at compile time. If you want to alter PHP's runtime configuration, please see the chapter on Runtime Configuration.
Configure Options in PHP
Misc options
- --enable-debug
Compile with debugging symbols.
- --with-layout=TYPE
Sets how installed files will be laid out. Type is one of PHP (default) or GNU. Note that if installing manpages under PREFIX (default), choose the GNU style in order for them to be found in the search path of manpath utility.
- --with-pear=DIR
Install PEAR in DIR (default PREFIX/lib/php).
- --without-pear
Do not install PEAR.
- --enable-zend-max-execution-timers
Use POSIX per-thread timers for max_execution_time tracking instead of the process-wide
setitimer(). These timers measure elapsed time (CLOCK_BOOTTIME, orCLOCK_MONOTONICon FreeBSD), whereas the defaultsetitimer(ITIMER_PROF)measures CPU time, so time spent sleeping or waiting on I/O counts towards the limit. Requirestimer_create()support: available on Linux, and on FreeBSD as of PHP 8.4.0. Available since PHP 8.1.0. Enabled by default for ZTS builds since PHP 8.3.0.- --enable-sigchild
Enable PHP's own SIGCHLD handler.
- --disable-rpath
Disable passing additional runtime library search paths.
- --enable-libgcc
Enable explicitly linking against libgcc.
- --enable-php-streams
Include experimental PHP streams. Do not use unless you are testing the code!
- --with-zlib-dir[=DIR]
Define the location of zlib install directory.
- --with-tsrm-pthreads
Use POSIX threads (default).
- --enable-shared[=PKGS]
Build shared libraries [default=yes].
- --enable-static[=PKGS]
Build static libraries [default=yes].
- --enable-fast-install[=PKGS]
Optimize for fast installation [default=yes].
- --with-gnu-ld
Assume the C compiler uses GNU ld [default=no].
- --disable-libtool-lock
Avoid locking (might break parallel builds).
- --with-pic
Try to use only PIC/non-PIC objects [default=use both].
- --enable-versioning
Export only required symbols. See INSTALL for more information.
PHP options
- --enable-maintainer-mode
Enable make rules and dependencies not useful (and sometimes confusing) to the casual installer.
- --with-config-file-path=PATH
Sets the path in which to look for php.ini, defaults to
PREFIX/lib.- --disable-short-tags
Disable the short-form <? start tag by default.
- --with-libdir
Specifies the directory where the libraries to build PHP exist on a Unix system. For 64bit systems, its needed to specify this argument to the
lib64directory like:--with-libdir=lib64.- --enable-zts
Enables thread safety. Prior to PHP 8.0.0 on non-Windows systems, the option was called --enable-maintainer-zts.
SAPI options
The following list contains the available SAPI&s (Server
Application Programming Interface) for PHP.
- --with-apxs[=FILE]
Build shared Apache module. FILE is the optional pathname to the Apache apxs tool; defaults to apxs. Make sure you specify the version of apxs that is actually installed on your system and NOT the one that is in the apache source tarball.
- --with-apache[=DIR]
Build a static Apache module. DIR is the top-level Apache build directory, defaults to /usr/local/apache.
- --with-mod_charset
Enable transfer tables for mod_charset (Russian Apache).
- --with-apxs2[=FILE]
Build shared Apache 2.0 module. FILE is the optional pathname to the Apache apxs tool; defaults to apxs.
- --disable-cli
Disable building the CLI version of PHP (this forces --without-pear). More information is available in the section about Using PHP from the command line.
- --enable-phpdbg
Enable phpdbg interactive debugger SAPI module support.
- --enable-embed[=TYPE]
Enable building of the embedded SAPI library. TYPE is either
sharedorstatic, which defaults toshared.- --with-servlet[=DIR]
Include servlet support. DIR is the base install directory for the JSDK. This SAPI requires the java extension must be built as a shared dl.
- --disable-cgi
Disable building CGI version of PHP.
This argument also enables FastCGI.
Директивы php.ini: карта конфигурации
Директива php.ini действует в определённом SAPI и имеет режим изменяемости. Перед правкой выясняют загруженный файл, дополнительные ini, допустимое место изменения и единицы значения; затем перезапускают или перечитывают нужный процесс и проверяют результат в том же окружении.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
Директивы ядра php.ini
Директива php.ini действует в определённом SAPI и имеет режим изменяемости. Перед правкой выясняют загруженный файл, дополнительные ini, допустимое место изменения и единицы значения; затем перезапускают или перечитывают нужный процесс и проверяют результат в том же окружении.
Полный официальный договор страницы — большой справочник, раскрывается по запросу
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Список включает встроенные директивы файла php.ini, которыми настраивают PHP. Директивы, которые обрабатываются модулями, перечисляют и подробно описывают страницы документации модулей. Например, информацию о директивах сессий даёт страница документации сессий.
Замечание:
PHP работает со значениями по умолчанию, только если не подключили файл php.ini; значения файла php.ini для производственной среды и для разработки часто различаются.
Языковые опции
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| short_open_tag | "1" | INI_PERDIR | |
| precision | "14" | INI_ALL | |
| serialize_precision | "-1" | INI_ALL | До версии PHP 7.1.0 значение по умолчанию равнялось 17. |
| disable_functions | "" | Только INI_SYSTEM | |
| disable_classes | "" | Только php.ini | В PHP 8.5.0 директиву удалили. |
| exit_on_timeout | "" | INI_ALL | |
| expose_php | "1" | Только php.ini | |
| hard_timeout | "2" | INI_SYSTEM | Опция доступна с PHP 7.1.0. |
| zend.exception_ignore_args | "0" | INI_ALL | Опция доступна с PHP 7.4.0 |
| zend.multibyte | "0" | INI_ALL | |
| zend.script_encoding | NULL | INI_ALL | |
| zend.detect_unicode | NULL | INI_ALL | |
| zend.signal_check | "0" | INI_SYSTEM | |
| zend.assertions | "1" | INI_ALL с ограничениями | |
| zend.exception_string_param_max_len | "15" | INI_ALL | Опция доступна с PHP 8.0.0. |
Краткое разъяснение конфигурационных директив.
short_open_tagboolОпция включает или отключает короткую форму записи открывающего PHP-тега:
<? ?>. Опцию отключают при встраивании XML-разметки в PHP-скрипт, чтобы синтаксический анализатор не интерпретировал первые два символа XML-декларации<?xml ?>как короткий PHP-тег. При включённой директиве XML-декларацию выводят средствами PHP, например:<?php echo '<?xml version="1.0"?>'; ?>. При отключении опции в режим разбора PHP-кода переключаются длинной формой открывающего PHP-тега:<?php ?>.Замечание:
Директива не влияет на сокращённую запись
<?=, которая доступна как часть синтаксиса языка.precisionintКоличество значащих цифр, отображаемых для чисел с плавающей точкой. Значение
-1включает усовершенствованный алгоритм для округления таких чисел.serialize_precisionintКоличество сохраняемых значащих цифр при сериализации чисел с плавающей точкой. Значение
-1включает усовершенствованный алгоритм для округления таких чисел.expose_phpboolОпция сообщает о работе PHP на сервере, включая передачу версии PHP в HTTP-заголовке наподобие X-Powered-By: PHP/5.3.7.
disable_functionsstringДиректива отключает отдельные функции. Опция принимает разделённый запятыми список названий функций. Начиная с PHP 8.0.0 отключение функции удаляет определение функции и разрешает переопределить функцию в пользовательском коде. До PHP 8.0.0 отключение функции только предотвращало вызов функции.
Директива отключает только внутренние функции. Функция не затрагивает пользовательские функции.
Директиву устанавливают только в файле php.ini. Опцию нельзя устанавливать в файле httpd.conf.
ВниманиеВ окружениях общих хостингов директива даёт недостаточный уровень защиты, поскольку отключённые функции возможно вызывать обходными путями.
disable_classesstringДиректива отключает отдельные классы. Опция принимает разделённый запятыми список названий классов. Отключение класса только запрещает создавать экземпляр класса.
Директива отключает только внутренние классы. Опция не затрагивает пользовательские классы.
Директиву устанавливают только в файле php.ini. Опцию нельзя устанавливать в файле httpd.conf.
ВниманиеВ окружениях общих хостингов директива даёт недостаточный уровень защиты, поскольку объекты отключённых классов возможно создать обходными путями.
ВниманиеФункциональность УДАЛЕНА в PHP 8.5.0.
zend.assertionsintСо значением
1проверочный код будет исполняться (режим разработки). При значении0PHP сгенерирует код проверок, однако, исполнять не будет. Со значением-1, проверочный код не будет генерироваться (продуктивный режим).Замечание:
При запуске процесса в режиме релиза значение директивы zend.assertions нельзя будет изменить во время выполнения, поскольку код утверждений не генерируется.
При запуске процесса в режиме разработки для директивы zend.assertions нельзя будет установить значение
-1во время выполнения.zend.exception_string_param_max_lenintМаксимальная длина аргументов строковой функции в строковых трассировках стека. Опиция принимает значение в диапазоне от
"0"до"1000000".hard_timeoutintПосле истечения времени ожидания, которое установили в директиве max_execution_time, среда выполнения PHP аккуратно отключит ресурсы. Если во время этого что-то застрянет, время ожидания установится на заданное количество секунд. После истечения жёсткого времени ожидания PHP завершит работу с ошибкой. При установке значения 0 жёсткое время ожидания не активируется.
После истечения жёсткого времени ожидания и остановки PHP возникает ошибка наподобие:
Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0
zend.exception_ignore_argsboolИсключает аргументы из трассировки стека, которая генерируется при исключениях.
zend.multibyteboolДиректива разрешает разбор файлов с исходным кодом в многобайтовых кодировках. Опцию zend.multibyte включают для правильной интерпретации многобайтовых строковых данных в кодировках символов наподобие SJIS, BIG5. Для файлов в кодировках UTF-8, EUC и других совместимых с ISO-8859-1 кодировках активация опции не требуется.
Режим разбора, который активируется директивой zend.multibyte, работает только при доступности модуля mbstring.
zend.script_encodingstringPHP применяет значение только при отсутствии директивы declare(encoding=...) в начале скрипта. В кодировках, которые несовместимы с кодировкой ISO-8859-1, требуется включить и опцию zend.multibyte, и опцию zend.script_encoding.
Литеральные строки транслитерируются из кодировки директивы zend.script_encoding в кодировку директивы mbstring.internal_encoding, как если бы вызвали функцию mb_convert_encoding().
zend.detect_unicodeboolОпределяет, проверять ли BOM (Byte Order Mark, метка порядка байтов) и корректность многобайтных символов в файле. Эта проверка производится до вызова __halt_compiler(). Доступна только в режиме Zend Multibyte.
zend.signal_checkboolОпределяет, проверять ли заменённые обработчики сигналов при завершении скрипта.
exit_on_timeoutboolДиректива работает только с модулем mod_php веб-сервера Apache1 и заставляет дочерний процесс Apache завершить работу при истечении времени ожидания выполнения PHP-скрипта. Превышение времени ожидания приводит к внутреннему вызову longjmp() в Apache1, который оставляет отдельные модули в несогласованном состоянии. По завершении процесса все неснятые блокировки или память очистятся.
Ограничения ресурсов
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| memory_limit | "128M" | INI_ALL |
Краткое разъяснение конфигурационных директив.
memory_limitintДиректива задаёт предельный объем памяти в байтах, который разрешается выделять для работы скрипта. Ограничение исключает исчерпание доступной серверу памяти при ошибках в скрипте или попытках обработать данные за пределами ограничения. Значение
-1отключает ограничение памяти.Объём измеряется в байтах, если значение параметра указали как целое число (int). Параметр также принимает значения в сокращённой нотации, которую описывает раздел FAQ.
Смотрите также описание директивы: max_execution_time.
Настройка производительности
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| realpath_cache_size | "4M" | INI_SYSTEM | До PHP 7.0.16 и 7.1.2 значение по умолчанию равнялось "16K" |
| realpath_cache_ttl | "120" | INI_SYSTEM |
Замечание:
Директива open_basedirотключит кеш realpath.
Краткое разъяснение конфигурационных директив.
realpath_cache_sizeintДиректива определяет размера кеша realpath, который будет использовать PHP. Это значение требуется увеличить в системах, в которых PHP открывает много файлов, чтобы отразить количество файловых операций, которые выполнил PHP.
Размер — общее количество байтов в сохранённых строках путей, плюс размер данных, которые связаны с записью кеша. Это значит, что для хранения длинных путей в кеше, размер этого кеша должен быть больше. Это значение не определяет напрямую количество разных путей, которые PHP может закешировать.
Размер, который требуется для кеширования, зависит от системы.
realpath_cache_ttlintВремя в секундах, в течение которого PHP обращается в realpath-кеш для файла или каталога. Для систем, в которых файлы изменяются редко, значение увеличивают.
Обработка данных
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| arg_separator.output | "&" | INI_ALL | |
| arg_separator.input | "&" | INI_PERDIR | |
| variables_order | "EGPCS" | INI_PERDIR | |
| request_order | "" | INI_PERDIR | |
| auto_globals_jit | "1" | INI_PERDIR | |
| register_argc_argv | "1" | INI_PERDIR | С PHP 8.5.0 директива устарела. |
| enable_post_data_reading | "1" | INI_PERDIR | |
| post_max_size | "8M" | INI_PERDIR | |
| auto_prepend_file | NULL | INI_PERDIR | |
| auto_append_file | NULL | INI_PERDIR | |
| default_mimetype | "text/html" | INI_ALL | |
| default_charset | "UTF-8" | INI_ALL | |
| input_encoding | "" | INI_ALL | |
| output_encoding | "" | INI_ALL | |
| internal_encoding | "" | INI_ALL |
Краткое разъяснение конфигурационных директив.
arg_separator.outputstringРазделитель аргументов в URL-адресах, которые генерирует PHP.
arg_separator.inputstringСписок разделителей, которые PHP применяет при разборе входных URL-адресов на переменные.
Замечание:
Каждый символ в директиве интерпретируется как разделитель!
variables_orderstringУстанавливает порядок обработки переменных EGPCS (
Environment,Get,Post,Cookie, иServer). Например, если variables_order установлена в"SP", то PHP создаст superglobals$_SERVER и $_POST, но не будет создавать $_ENV, $_GET и $_COOKIE. Установка в "" означает, что ни одна superglobals не будет установлена.ВниманиеВ CGI и FastCGI SAPI, в $_SERVER также добавляются значения переменных окружения;
Sвсегда эквивалентнаESвне зависимости от самого положенияEв этой директиве.Замечание:
Эта директива также влияет на содержимое и порядок переменной $_REQUEST.
request_orderstringЭта директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST. Добавление производится слева направо, новые значения перезаписывают старые.
Если значение этой директивы не установлено, то используется значение директивы variables_order для содержимого переменной $_REQUEST.
Учтите, что файлы php.ini, поставляемые с дистрибутивом, по соображениям безопасности не содержат значение
'C'(cookies).auto_globals_jitboolКогда включено, переменные SERVER, REQUEST и ENV создаются в тот момент, когда они впервые используются (Just In Time), а не в начале выполнения скрипта. Если эти переменные в скрипте не используются, включение этой директивы приведёт к росту производительности.
ВниманиеИспользование переменных SERVER, REQUEST и ENV проверяется на стадии компиляции, поэтому их использование с помощью, например, переменных переменных не запустит их инициализацию.
register_argc_argvboolСообщает PHP, объявлять ли переменные argv и argc, которые заполняются GET-информацией.
Смотрите также раздел «Работа с PHP из командной строки».
ВниманиеНачиная с PHP 8.5.0 функциональность УСТАРЕЛА. Полагаться на функциональность настоятельно не рекомендуют.
Замечание:
Поведение, при котором PHP заполняет элементы
$_SERVER['argc']и$_SERVER['argv']из аргументов через серверный SAPI, а не в режиме CLI, устарело. Для доступа к информации лучше установить директивуregister_argc_argv=0и переключиться на считывание аргументов либо из суперглобального массива $_GET, либо из элемента$_SERVER['QUERY_STRING'], но предварительно проверить безопасность перехода с аргументов на суперглобальные переменные.enable_post_data_readingboolПри отключении опции суперглобальные массивы $_POST и $_FILESне заполняются. Сырое тело запроса остаётся в потоке php://input, откуда данные считывают вручную или разбирают функцией request_parse_body(). Отключение опции полезно для проксирования запросов или обработки POST-данных с минимумом нагрузки на память.
post_max_sizeintУстанавливает максимально допустимый размер данных, отправляемых методом POST. Это значение также влияет на загрузку файлов. Для загрузки больших файлов это значение должно быть больше значения директивы upload_max_filesize.
В сущности, memory_limit должна быть больше чем
post_max_size.Объём измеряется в байтах, если значение параметра указали как целое число (int). Параметр также принимает значения в сокращённой нотации, которую описывает раздел FAQ.
Если размер POST-данных больше значения директивы post_max_size, суперглобальные переменные$_POST и $_FILES будут пустыми. Это проверяют разными способами, например, передав переменную $_GET в скрипт, который обрабатывает данные, т. е.
<form action="edit.php?processed=1">, а затем проверить, установлена ли переменная $_GET['processed'].Замечание:
PHP разрешает сокращения значений байтов, включая K (кило), M (мега) и G (гига). PHP автоматически преобразовывает эти сокращения. Будьте осторожны с превышением диапазона 32-битных целых значений на 32-битной версии PHP, поскольку это приведёт к ошибке скрипта.
Список изменений post_max_sizeВерсия Описание 5.3.4 Установка post_max_size= 0 не снимет ограничение, если контент имеет тип application/x-www-form-urlencoded или не зарегистрирован в PHP.5.3.2 , 5.2.12 Стало возможным снять ограничение на размер пост-запроса установкой post_max_sizeв 0.auto_prepend_filestringОпределяет имя файла, который будет автоматически обрабатываться перед основным файлом. Файл вызывается так, будто он был подключён при помощи функции require, так что include_path также используется.
Специальное значение
noneотключает эту директиву.auto_append_filestringОпределяет имя файла, который будет автоматически обрабатываться после основного файла. Файл вызывается так, будто он был подключён при помощи функции require, так что include_path тоже используется.
Специальное значение
noneотключает эту директиву.Замечание:
Если скрипт завершает работу при помощи exit(), auto-append НЕ выполняется.
default_mimetypestringПо умолчанию PHP выводит название кодировки в заголовке Content-Type. Если передавать кодировку не требуется, просто оставьте эту опцию пустой.
"media type" по умолчанию установлен как "text/html".
default_charsetstring"UTF-8" — значение по умолчанию и используется как кодировка по умолчанию для функций htmlentities(), html_entity_decode() и htmlspecialchars(), если параметр
encodingне указали. Значениеdefault_charsetтакже используется для указания кодировки по умолчанию для функций iconv, если конфигурационные опцииiconv.input_encoding,iconv.output_encodingиiconv.internal_encodingне установлены, и для функций mbstring, если не установленыmbstring.http_inputmbstring.http_outputmbstring.internal_encoding.Все версии PHP используют это значение как кодировку для стандартного заголовка Content-Type, отправляемого PHP, если этот заголовок не переопределён вызовом функции header().
Не рекомендуется устанавливать
default_charsetв пустое значение.input_encodingstringЭта опция используется для многобайтных модулей, таких как mbstring и iconv. По умолчанию пусто.
output_encodingstringЭта опция используется для многобайтных модулей, таких как mbstring и iconv. По умолчанию пусто.
internal_encodingstringЭта опция используется для многобайтных модулей, таких как mbstring и iconv. По умолчанию пусто. В это случае используется default_charset.
Пути и Директории
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| include_path | ".;/path/to/php/pear" | INI_ALL | |
| open_basedir | NULL | INI_ALL | |
| doc_root | NULL | INI_SYSTEM | |
| user_dir | NULL | INI_SYSTEM | |
| user_ini.cache_ttl | "300" | INI_SYSTEM | |
| user_ini.filename | ".user.ini" | INI_SYSTEM | |
| extension_dir | "/path/to/php" | INI_SYSTEM | |
| extension | NULL | Только php.ini | |
| zend_extension | NULL | Только php.ini | |
| cgi.check_shebang_line | "1" | INI_SYSTEM | |
| cgi.discard_path | "0" | INI_SYSTEM | |
| cgi.fix_pathinfo | "1" | INI_SYSTEM | |
| cgi.force_redirect | "1" | INI_SYSTEM | |
| cgi.nph | "0" | INI_SYSTEM | |
| cgi.redirect_status_env | NULL | INI_SYSTEM | |
| cgi.rfc2616_headers | "0" | INI_ALL | |
| fastcgi.impersonate | "0" | INI_SYSTEM | |
| fastcgi.logging | "1" | INI_SYSTEM |
Краткое разъяснение конфигурационных директив.
include_pathstringУказывает список директорий, в которых функции require, include, fopen(), file(), readfile() и file_get_contents() ищут файлы. Формат соответствует формату системной переменной окружения PATH: список директорий, разделённых двоеточием в Unix или точкой с запятой в Windows.
При поиске подключаемых файлов PHP обрабатывает каждое значение директивы include_path отдельно. PHP проверяет первый путь и, если не находит файл, переходит к следующему, и так до обнаружения подключаемого файла или возврата ошибки уровня
E_WARNINGилиE_ERROR. Значение директивы include_path во время выполнения скрипта изменяют функцией set_include_path().Пример #1 include_path в Unix
include_path=".:/php/includes"
Пример #2 include_path в Windows
include_path=".;c:\php\includes"
Использование
.в include_path позволяет задавать относительные пути для подключения файлов, так как точка означает текущую директорию. Однако, более эффективно использоватьinclude './file', чем заставлять PHP каждый раз проверять текущую директорию при подключении каждого файла.Замечание:
Переменные окружения (
ENV) также доступны в .ini файлах. Таким образом, можно ссылаться на домашнюю директорию с помощью директив${LOGIN}и${USER}.Переменные окружения могут отличаться между различными серверными API, так как сами эти окружения отличаются друг от друга.
Пример #3 Настройка include_path с помощью переменной окружения ${USER} в Unix
include_path = ".:${USER}/pear/php"open_basedirstringОграничивает для PHP доступ к файлам деревом каталогов, включая сам файл.
Когда скрипт пытается получить доступ к файловой системе, например через выражение include или функцию fopen(), PHP проверяет расположение файла. PHP откажется получать доступ к файлу, когда файл лежит за пределами дерева каталогов. PHP разрешит каждую символическую ссылку, поэтому невозможно обойти ограничение через символическую ссылку. Символическая ссылка не разрешится, если файл не существует, а PHP будет сравнивать имя файла с разрешённым путём open_basedir.
Опция open_basedir влияет не только на функции для работы с файловой системой; например, если СУБД
MySQLнастроили на работу с драйверомmysqlnd, директива open_basedir будет влиять на работу инструкцииLOAD DATA INFILE. Большая часть расширенной функциональности PHP пользуется директивойopen_basedirтаким способом.Символ точки
.указывает, что PHP будет использовать рабочий каталог скрипта как базовую директорию. Однако это снижает безопасность, поскольку рабочую директорию скрипта легко изменить функцией chdir().В файле httpd.conf директиву open_basedir можно отключить (например, для отдельных виртуальных хостов) как и другие конфигурационные директивы: "
php_admin_value open_basedir none".В системах под управлением ОС Windows каталоги разделяют точкой с запятой. В остальных системах директории разделяют двоеточием. Когда PHP работает как модуль веб-сервера Apache, пути директивы open_basedir из родительских каталогов теперь автоматически наследуются.
Ограничение, которое устанавливает директива open_basedir, — имя каталога, а не префикс.
По умолчанию разрешается открывать все файлы.
Замечание:
Значение директивы open_basedir можно сузить во время выполнения скрипта. Это означает, что если в файле php.ini для директивы open_basedir установили значение
/www/, скрипт может сузить конфигурацию директивы до каталога/www/tmp/через функцию ini_set(). При перечислении ряда каталогов константуPATH_SEPARATORуказывают как разделитель путей, который не зависит от операционной системы.Начиная с PHP 8.3.0 директива open_basedir больше не принимает пути, в которых содержится родительский каталог
.., когда значение устанавливают во время выполнения функцией ini_set().Замечание:
Директива open_basedir установит для директивы realpath_cache_size значение
0, которое отключит realpath-кеш.ПредостережениеОпция конфигурации
open_basedir— просто дополнительная подстраховка, которая не претендует всесторонность, и поэтому на директиву нельзя полагаться, когда дело касается безопасности.doc_rootstring«Корневая директория» PHP на текущем сервере. Учитывается только непустое значение директивы. Если PHP не был скомпилирован с FORCE_REDIRECT, вам следует установить doc_root, если вы используете PHP в качестве CGI под любым веб-сервером (кроме IIS). Альтернативой является использование конфигурационной директивы cgi.force_redirect, речь о которой идёт ниже.
user_ini.cache_ttlintuser_ini.filenamestringuser_dirstringБазовое имя директории, используемой в домашнем каталоге пользователя для PHP файлов, например, public_html.
extension_dirstringВ какой директории PHP должен искать динамически загружаемые модули. Рекомендуется указывать абсолютный путь. Смотрите также: enable_dl и dl().
extensionstringКакие динамически загружаемые модули должны быть загружены при старте PHP.
zend_extensionstringИмя динамически загружаемого модуля Zend (например, XDebug), который должен быть загружен при старте PHP.
cgi.check_shebang_lineboolКонтролирует, нужно ли проверять первую строку CGI PHP-скрипта на содержание
#!(shebang). Эта строка может быть необходима, если скрипт должен поддерживать как отдельный запуск, так и с помощью PHP CGI. PHP в режиме CGI пропускает эту строку и игнорирует её содержимое, если данная директива включена.cgi.discard_pathboolЕсли разрешено, бинарный файл PHP CGI может безопасно располагаться вне веб-дерева и люди не смогут обойти безопасность .htaccess.
cgi.fix_pathinfoboolОбеспечивает поддержку правильных
PATH_INFO/PATH_TRANSLATEDв CGI. Раньше PHP просто устанавливалPATH_TRANSLATEDвSCRIPT_FILENAMEи не обращал внимания наPATH_INFO. Для получения дополнительной информации оPATH_INFO, обратитесь к спецификации CGI. Установка этого значения в1заставит PHP CGI исправлять свой путь в соответствии со спецификацией. Значение 0 соответствует предыдущему поведению. По умолчанию опция включена. Вы должны исправить свои скрипты так, чтобы они использовалиSCRIPT_FILENAMEвместоPATH_TRANSLATED.cgi.force_redirectboolДиректива cgi.force_redirect поддерживает безопасность при запуске PHP в режиме CGI на большей части веб-серверов. PHP по умолчанию включает механизм проверки источника запроса и пропускает только запросы от веб-сервера, если значение директивы не определили. Директиву отключают на свой страх и риск.
Замечание:
Пользователям Windows: При запуске PHP на веб-сервере IIS опцию обязательно отключают. Предупреждение также относится к веб-серверам OmniHTTPD и Xitami.
cgi.nphboolПри включении директивы cgi.nph PHP в режиме CGI принудительно возвращает заголовок Status: 200 на каждый запрос.
cgi.redirect_status_envstringПри включённой директиве cgi.force_redirect и запуске интерпретатора вне веб-сервера Apache или веб-сервера iPlanet компании Netscape иногда требуется установка переменной окружения, название которой PHP проверяет, прежде чем продолжить обработку запроса и начать выполнение скрипта.
Замечание:
Неправильная настройка переменной ослабляет защиту сервера, поэтому вначале изучают влияние директивы на безопасность, а затем определяют переменную.
cgi.rfc2616_headersboolДиректива сообщает PHP, какой тип заголовков отправлять с HTTP-кодом ответа. При отключённой директиве PHP отправляет заголовок по стандарту » RFC 3875 — "Status:", который поддерживается Apache и другими веб-серверами. При включённой директиве PHP отправит заголовки, которые соответствуют стандарту » RFC 2616.
При включённой директиве и работе PHP в CGI-окружении наподобие PHP-FPM вместо HTTP-заголовков ответа в стиле стандарта RFC 2616 потребуется использовать эквивалент этих заголовков из стандарта RFC 3875, например, вместо header("HTTP/1.0 404 Not found"); потребуется указать header("Status: 404 Not Found");
Опцию включают, только если знают о последствиях.
fastcgi.impersonateboolРежим FastCGI на веб-серверах IIS под управлением ОС Windows NT поддерживает механизм имперсонации, при котором процесс вместе с клиентским токеном безопасности получает привилегии клиента, от имени которого поступил запрос. Механизм помогает веб-серверу IIS определять контекст безопасности, в котором выполняется запрос. На 17 марта 2002 модуль mod_fastcgi для веб-сервера Apache не поддерживает имперсонацию. Директиву включают при запуске PHP на веб-сервере IIS. По умолчанию опция отключена.
fastcgi.loggingboolВключает логирование SAPI при запуске PHP в режиме FastCGI. Логирование включено по умолчанию.
Закачивание Файлов
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| file_uploads | "1" | INI_SYSTEM | |
| upload_tmp_dir | NULL | INI_SYSTEM | |
| max_input_nesting_level | 64 | INI_PERDIR | |
| max_input_vars | 1000 | INI_PERDIR | |
| upload_max_filesize | "2M" | INI_PERDIR | |
| max_file_uploads | 20 | INI_PERDIR |
Краткое разъяснение конфигурационных директив.
file_uploadsboolРазрешать или не разрешать закачивание файлов. Смотрите также директивы upload_max_filesize, upload_tmp_dir и post_max_size.
upload_tmp_dirstringКаталог для временного хранения файлов при загрузке. Файлы загрузятся, только если каталог доступен для записи пользователю, от имени которого запустили PHP-процесс. PHP загрузит файлы в стандартный системный каталог для временных файлов, если значение директивы не указали.
При недоступности заданного директивой каталога для записи PHP вернётся к предустановленному в системе каталогу для временных файлов, путь к которому потребуется добавить в список значений директивы open_basedir, если директива активна, иначе возникнет ошибка загрузки.
upload_max_filesizeintМаксимальный размер закачиваемого файла.
Значение директивы post_max_size указывают больше значения этой директивы.
Объём измеряется в байтах, если значение параметра указали как целое число (int). Параметр также принимает значения в сокращённой нотации, которую описывает раздел FAQ.
max_file_uploadsintПредельное количество файлов для одновременной загрузки на сервер. Поля загрузки, которые при отправке формы оставили пустыми, не учитываются.
Общий SQL
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| sql.safe_mode | "0" | INI_SYSTEM | Удалён в PHP 7.2.0 |
Краткое разъяснение конфигурационных директив.
sql.safe_modeboolПри включённой опции функции подключения к базе данных, через которые указывают значения по умолчанию, игнорируют пользовательские аргументы и устанавливают значения из директивы. Подробнее о значениях по умолчанию рассказывает документация к функциям подключения конкретной базы данных.
ВниманиеВ PHP 7.2.0 опцию УДАЛИЛИ.
Особые настройки для ОС Windows
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| windows.show_crt_warning | "0" | INI_ALL |
Краткое разъяснение конфигурационных директив.
windows.show_crt_warningboolПри включении директивы выводятся предупреждения библиотеки C Runtime для ОС Windows.
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
This list includes the core php.ini directives you can set to configure your PHP setup. Directives handled by extensions are listed and detailed at the extension documentation pages respectively; Information on the session directives for example can be found at the sessions page.
Note:
The defaults listed here are used when php.ini is not loaded; the values for the production and development php.ini may vary.
Language Options
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| short_open_tag | "1" | INI_PERDIR | |
| precision | "14" | INI_ALL | |
| serialize_precision | "-1" | INI_ALL | Prior to PHP 7.1.0, the default value was 17. |
| disable_functions | "" | INI_SYSTEM only | |
| disable_classes | "" | php.ini only | Removed as of PHP 8.5.0 |
| exit_on_timeout | "" | INI_ALL | |
| expose_php | "1" | php.ini only | |
| hard_timeout | "2" | INI_SYSTEM | Available as of PHP 7.1.0. |
| zend.exception_ignore_args | "0" | INI_ALL | Available as of PHP 7.4.0 |
| zend.multibyte | "0" | INI_ALL | |
| zend.script_encoding | NULL | INI_ALL | |
| zend.detect_unicode | NULL | INI_ALL | |
| zend.signal_check | "0" | INI_SYSTEM | |
| zend.assertions | "1" | INI_ALL with restrictions | |
| zend.exception_string_param_max_len | "15" | INI_ALL | Available as of PHP 8.0.0. |
Here's a short explanation of the configuration directives.
short_open_tagboolTells PHP whether the short form (
<? ?>) of PHP's open tag should be allowed. If you want to use PHP in combination with XML, you can disable this option in order to use<?xml ?>inline. Otherwise, you can print it with PHP, for example:<?php echo '<?xml version="1.0"?>'; ?>. Also, if disabled, you must use the long form of the PHP open tag (<?php ?>).Note:
This directive does not affect the shorthand
<?=, which is always available.precisionintThe number of significant digits displayed in floating point numbers.
-1means that an enhanced algorithm for rounding such numbers will be used.serialize_precisionintThe number of significant digits stored while serializing floating point numbers.
-1means that an enhanced algorithm for rounding such numbers will be used.expose_phpboolExposes to the world that PHP is installed on the server, which includes the PHP version within the HTTP header (e.g., X-Powered-By: PHP/5.3.7).
disable_functionsstringThis directive allows certain functions to be disabled. It takes a comma-delimited list of function names. As of PHP 8.0.0, disabling a function removes its definition, allowing userland to redefine it. Prior to PHP 8.0.0, disabling a function just prevented the function from being invoked.
Only internal functions can be disabled using this directive. User-defined functions are unaffected.
This directive must be set in php.ini. It cannot be set in httpd.conf.
WarningThis directive can be circumvented and should not be considered a sufficient security measure for shared hosting environments.
disable_classesstringThis directive allows certain classes to be disabled. It takes a comma-delimited list of class names. Disabling a class just prevents the class's instantiation.
Only internal classes can be disabled using this directive. User-defined classes are unaffected.
This directive must be set in php.ini. It cannot be set in httpd.conf.
WarningThis directive can be circumvented and should not be considered a sufficient security measure for shared hosting environments.
WarningThis feature has been REMOVED as of PHP 8.5.0.
zend.assertionsintWhen set to
1, assertion code will be generated and executed (development mode). When set to0, assertion code will be generated but it will be skipped (not executed) at runtime. When set to-1, assertion code will not be generated, making the assertions zero-cost (production mode).Note:
If a process is started in production mode, zend.assertions cannot be changed at runtime, since the code for assertions was not generated.
If a process is started in development mode, zend.assertions cannot be set to
-1at runtime.zend.exception_string_param_max_lenintThe maximum length of string function arguments in stringified stack traces. Must range between
"0"and"1000000".hard_timeoutintWhen the timeout set in max_execution_time has been hit, the PHP runtime will tear down resources gracefully. If something gets stuck while this happens, the hard timeout will tick for the set amount of seconds. When the hard timeout is hit, PHP will exit ungracefully. When set to 0, the hard timeout will never activate.
When PHP stops from a hard timeout, it will look something like this:
Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0
zend.exception_ignore_argsboolExcludes arguments from stack traces generated from exceptions.
zend.multibyteboolEnables parsing of source files in multibyte encodings. Enabling zend.multibyte is required to use character encodings like SJIS, BIG5, etc that contain special characters in multibyte string data. ISO-8859-1 compatible encodings like UTF-8, EUC, etc do not require this option.
Enabling zend.multibyte requires the mbstring extension to be available.
zend.script_encodingstringThis value will be used unless a declare(encoding=...) directive appears at the top of the script. When ISO-8859-1 incompatible encoding is used, both zend.multibyte and zend.script_encoding must be used.
Literal strings will be transliterated from zend.script_encoding to mbstring.internal_encoding, as if mb_convert_encoding() would have been called.
zend.detect_unicodeboolCheck for BOM (Byte Order Mark) and see if the file contains valid multibyte characters. This detection is performed before processing of __halt_compiler(). Available only in Zend Multibyte mode.
zend.signal_checkboolTo check for replaced signal handlers on shutdown.
exit_on_timeoutboolThis is an Apache1 mod_php-only directive that forces an Apache child to exit if a PHP execution timeout occurred. Such a timeout causes an internal longjmp() call in Apache1 which can leave some extensions in an inconsistent state. By terminating the process any outstanding locks or memory will be cleaned up.
Resource Limits
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| memory_limit | "128M" | INI_ALL | |
| max_memory_limit | "-1" | INI_SYSTEM | Available as of PHP 8.5.0 |
Here's a short explanation of the configuration directives.
memory_limitintThis sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server. Note that to have no memory limit, set this directive to
-1.When an int is used, the value is measured in bytes. Shorthand notation, as described in this FAQ, may also be used.
max_memory_limitintAvailable as of PHP 8.5.0. This startup-only setting controls the maximum value that memory_limit may be configured to, either at startup or at runtime (e.g. via ini_set()). Setting memory_limit to a value exceeding
max_memory_limitresults in a warning and the value being capped. Set to-1(the default) to impose no upper bound.When an int is used, the value is measured in bytes. Shorthand notation, as described in this FAQ, may also be used.
See also: max_execution_time.
Performance Tuning
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| realpath_cache_size | "4M" | INI_SYSTEM | Prior to PHP 7.0.16 and 7.1.2, the default was "16K" |
| realpath_cache_ttl | "120" | INI_SYSTEM |
Note:
Using open_basedir will disable the realpath cache.
Here's a short explanation of the configuration directives.
realpath_cache_sizeintDetermines the size of the realpath cache to be used by PHP. This value should be increased on systems where PHP opens many files, to reflect the quantity of the file operations performed.
The size represents the total number of bytes in the path strings stored, plus the size of the data associated with the cache entry. This means that in order to store longer paths in the cache, the cache size must be larger. This value does not directly control the number of distinct paths that can be cached.
The size required for the cache entry data is system dependent.
realpath_cache_ttlintDuration of time (in seconds) for which to cache realpath information for a given file or directory. For systems with rarely changing files, consider increasing the value.
Data Handling
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| arg_separator.output | "&" | INI_ALL | |
| arg_separator.input | "&" | INI_PERDIR | |
| variables_order | "EGPCS" | INI_PERDIR | |
| request_order | "" | INI_PERDIR | |
| auto_globals_jit | "1" | INI_PERDIR | |
| register_argc_argv | "1" | INI_PERDIR | Deprecated as of PHP 8.5.0 |
| enable_post_data_reading | "1" | INI_PERDIR | |
| post_max_size | "8M" | INI_PERDIR | |
| auto_prepend_file | NULL | INI_PERDIR | |
| auto_append_file | NULL | INI_PERDIR | |
| default_mimetype | "text/html" | INI_ALL | |
| default_charset | "UTF-8" | INI_ALL | |
| input_encoding | "" | INI_ALL | |
| output_encoding | "" | INI_ALL | |
| internal_encoding | "" | INI_ALL |
Here's a short explanation of the configuration directives.
arg_separator.outputstringThe separator used in PHP generated URLs to separate arguments.
arg_separator.inputstringList of separator(s) used by PHP to parse input URLs into variables.
Note:
Every character in this directive is considered as separator!
variables_orderstringSets the order of the EGPCS (
Environment,Get,Post,Cookie, andServer) variable parsing. For example, if variables_order is set to"SP"then PHP will create the superglobals$_SERVER and $_POST, but not create $_ENV, $_GET, and $_COOKIE. Setting to "" means no superglobals will be set.WarningIn both the CGI and FastCGI SAPIs, $_SERVER is also populated by values from the environment;
Sis always equivalent toESregardless of the placement ofEelsewhere in this directive.Note:
The content and order of $_REQUEST is also affected by this directive.
request_orderstringThis directive describes the order in which PHP registers GET, POST and Cookie variables into the _REQUEST array. Registration is done from left to right, newer values override older values.
If this directive is not set, variables_order is used for $_REQUEST contents.
Note that the default distribution php.ini files does not contain the
'C'for cookies, due to security concerns.auto_globals_jitboolWhen enabled, the SERVER, REQUEST, and ENV variables are created when they're first used (Just In Time) instead of when the script starts. If these variables are not used within a script, having this directive on will result in a performance gain.
WarningUsage of SERVER, REQUEST, and ENV variables is checked during the compile time so using them through e.g. variable variables will not cause their initialization.
register_argc_argvboolTells PHP whether to declare the argv & argc variables (that would contain the GET information).
See also command line.
WarningThis feature has been DEPRECATED as of PHP 8.5.0. Relying on this feature is highly discouraged.
Note:
Deriving
$_SERVER['argc']and$_SERVER['argv']from the query string for non-CLI SAPIs has been deprecated. Configureregister_argc_argv=0and switch to either $_GET or$_SERVER['QUERY_STRING']to access the information, after verifying that the usage is safe.enable_post_data_readingboolDisabling this option causes $_POST and $_FILESnot to be populated. The request body remains unconsumed in php://input and can be read manually or parsed via request_parse_body(). This can be useful to proxy requests or to process the POST data in a memory efficient fashion.
post_max_sizeintSets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than upload_max_filesize.
Generally speaking, memory_limit should be larger than
post_max_size.When an int is used, the value is measured in bytes. Shorthand notation, as described in this FAQ, may also be used.
If the size of post data is greater than post_max_size, the $_POST and $_FILESsuperglobals are empty. This can be tracked in various ways, e.g. by passing the $_GET variable to the script processing the data, i.e.
<form action="edit.php?processed=1">, and then checking if $_GET['processed'] is set.Note:
PHP allows shortcuts for byte values, including K (kilo), M (mega) and G (giga). PHP will do the conversions automatically if you use any of these. Be careful not to exceed the 32 bit signed integer limit (if you're using 32bit versions) as it will cause your script to fail.
Changelog for post_max_sizeVersion Description 5.3.4 post_max_size= 0 will not disable the limit when the content type is application/x-www-form-urlencoded or is not registered with PHP.5.3.2 , 5.2.12 Allow unlimited post size by setting post_max_sizeto 0.auto_prepend_filestringSpecifies the name of a file that is automatically parsed before the main file. The file is included as if it was called with the require function, so include_path is used.
The special value
nonedisables auto-prepending.auto_append_filestringSpecifies the name of a file that is automatically parsed after the main file. The file is included as if it was called with the require function, so include_path is used.
The special value
nonedisables auto-appending.Note:
If the script is terminated with exit(), auto-append will not occur.
default_mimetypestringBy default, PHP will output a media type using the Content-Type header. To disable this, simply set it to be empty.
PHP's built-in default media type is set to text/html.
default_charsetstring"UTF-8" is the default value and its value is used as the default character encoding for htmlentities(), html_entity_decode() and htmlspecialchars() if the
encodingparameter is omitted. The value ofdefault_charsetwill also be used to set the default character set for iconv functions if theiconv.input_encoding,iconv.output_encodingandiconv.internal_encodingconfiguration options are unset, and for mbstring functions if thembstring.http_inputmbstring.http_outputmbstring.internal_encodingconfiguration option is unset.All versions of PHP will use this value as the charset within the default Content-Type header sent by PHP if the header isn't overridden by a call to header().
Setting
default_charsetto an empty value is not recommended.input_encodingstringThis setting is used for multibyte modules such as mbstring and iconv. Default is empty.
output_encodingstringThis setting is used for multibyte modules such as mbstring and iconv. Default is empty.
internal_encodingstringThis setting is used for multibyte modules such as mbstring and iconv. Default is empty. If empty, default_charset is used.
Paths and Directories
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| include_path | ".;/path/to/php/pear" | INI_ALL | |
| open_basedir | NULL | INI_ALL | |
| doc_root | NULL | INI_SYSTEM | |
| user_dir | NULL | INI_SYSTEM | |
| user_ini.cache_ttl | "300" | INI_SYSTEM | |
| user_ini.filename | ".user.ini" | INI_SYSTEM | |
| extension_dir | "/path/to/php" | INI_SYSTEM | |
| extension | NULL | php.ini only | |
| zend_extension | NULL | php.ini only | |
| cgi.check_shebang_line | "1" | INI_SYSTEM | |
| cgi.discard_path | "0" | INI_SYSTEM | |
| cgi.fix_pathinfo | "1" | INI_SYSTEM | |
| cgi.force_redirect | "1" | INI_SYSTEM | |
| cgi.nph | "0" | INI_SYSTEM | |
| cgi.redirect_status_env | NULL | INI_SYSTEM | |
| cgi.rfc2616_headers | "0" | INI_ALL | |
| fastcgi.impersonate | "0" | INI_SYSTEM | |
| fastcgi.logging | "1" | INI_SYSTEM |
Here's a short explanation of the configuration directives.
include_pathstringSpecifies a list of directories where the require, include, fopen(), file(), readfile() and file_get_contents() functions look for files. The format is like the system's PATH environment variable: a list of directories separated with a colon in Unix or semicolon in Windows.
PHP considers each entry in the include path separately when looking for files to include. It will check the first path, and if it doesn't find it, check the next path, until it either locates the included file or returns with an
E_WARNINGor anE_ERROR. You may modify or set your include path at runtime using set_include_path().Example #1 Unix include_path
include_path=".:/php/includes"
Example #2 Windows include_path
include_path=".;c:\php\includes"
Using a
.in the include path allows for relative includes as it means the current directory. However, it is more efficient to explicitly useinclude './file'than having PHP always check the current directory for every include.Note:
ENVvariables are also accessible in .ini files. As such it is possible to reference the home directory using${LOGIN}and${USER}.Environment variables may vary between Server APIs as those environments may be different.
Example #3 Unix include_path using ${USER} env variable
include_path = ".:${USER}/pear/php"open_basedirstringLimit the files that can be accessed by PHP to the specified directory-tree, including the file itself.
When a script tries to access the filesystem, for example using include, or fopen(), the location of the file is checked. When the file is outside the specified directory-tree, PHP will refuse to access it. All symbolic links are resolved, so it's not possible to avoid this restriction with a symlink. If the file doesn't exist then the symlink couldn't be resolved and the filename is compared to (a resolved) open_basedir.
open_basedir can affect more than just filesystem functions; for example if
MySQLis configured to usemysqlnddrivers,LOAD DATA INFILEwill be affected by open_basedir. Much of the extended functionality of PHP usesopen_basedirin this way.The special value
.indicates that the working directory of the script will be used as the base-directory. This is, however, a little dangerous as the working directory of the script can easily be changed with chdir().In httpd.conf, open_basedir can be turned off (e.g. for some virtual hosts) the same way as any other configuration directive with "
php_admin_value open_basedir none".Under Windows, separate the directories with a semicolon. On all other systems, separate the directories with a colon. As an Apache module, open_basedir paths from parent directories are now automatically inherited.
The restriction specified with open_basedir is a directory name, not a prefix.
The default is to allow all files to be opened.
Note:
open_basedir can be tightened at run-time. This means that if open_basedir is set to
/www/in php.ini a script can tighten the configuration to/www/tmp/at run-time with ini_set(). When listing several directories, you can use thePATH_SEPARATORconstant as a separator regardless of the operating system.As of PHP 8.3.0, open_basedir no longer accepts a paths containing the parent directory (
..) when set at runtime using ini_set().Note:
Using open_basedir will set realpath_cache_size to
0and thus disable the realpath cache.Warningopen_basedir does not restrict access to Unix domain sockets. PHP socket functions such as stream_socket_client() and fsockopen() can connect to a Unix socket path (e.g. unix:///var/run/docker.sock) regardless of the open_basedir setting.
Cautionopen_basediris just an extra safety net, that is in no way comprehensive, and can therefore not be relied upon when security is needed.doc_rootstringPHP's "root directory" on the server. Only used if non-empty. If PHP was not compiled with FORCE_REDIRECT, you should set doc_root if you are running PHP as a CGI under any web server (other than IIS). The alternative is to use the cgi.force_redirect configuration below.
user_ini.cache_ttlintuser_ini.filenamestringuser_dirstringThe base name of the directory used on a user's home directory for PHP files, for example public_html .
extension_dirstringIn what directory PHP should look for dynamically loadable extensions. It is recommended to specify an absolute path. See also: enable_dl, and dl().
extensionstringWhich dynamically loadable extensions to load when PHP starts up.
zend_extensionstringName of dynamically loadable Zend extension (for example XDebug) to load when PHP starts up.
cgi.check_shebang_lineboolControls whether CGI PHP checks for line starting with
#!(shebang) at the top of the running script. This line might be needed if the script support running both as stand-alone script and via PHP CGI. PHP in CGI mode skips this line and ignores its content if this directive is turned on.cgi.discard_pathboolIf this is enabled, the PHP CGI binary can safely be placed outside of the web tree and people will not be able to circumvent .htaccess security.
cgi.fix_pathinfoboolProvides real
PATH_INFO/PATH_TRANSLATEDsupport for CGI. PHP's previous behaviour was to setPATH_TRANSLATEDtoSCRIPT_FILENAME, and to not grok whatPATH_INFOis. For more information onPATH_INFO, see the CGI specs. Setting this to1will cause PHP CGI to fix its paths to conform to the spec. A setting of zero causes PHP to behave as before. It is turned on by default. You should fix your scripts to useSCRIPT_FILENAMErather thanPATH_TRANSLATED.cgi.force_redirectboolcgi.force_redirect is necessary to provide security running PHP as a CGI under most web servers. Left undefined, PHP turns this on by default. You can turn it off at your own risk.
Note:
Windows Users: When using IIS this option must be turned off. For OmniHTTPD or Xitami the same applies.
cgi.nphboolIf cgi.nph is enabled it will force cgi to always sent Status: 200 with every request.
cgi.redirect_status_envstringIf cgi.force_redirect is turned on, and you are not running under Apache or Netscape (iPlanet) web servers, you may need to set an environment variable name that PHP will look for to know it is OK to continue execution.
Note:
Setting this variable may cause security issues, know what you are doing first.
cgi.rfc2616_headersboolTells PHP what type of headers to use when sending HTTP response code. If it is disabled, PHP sends a » RFC 3875 "Status:" header that is supported by Apache and other web servers. When this option is enabled, PHP will send » RFC 2616 compliant headers.
If this option is enabled, and you are running PHP in a CGI environment (e.g. PHP-FPM) you should not use standard RFC 2616 style HTTP status response headers, you should instead use their RFC 3875 equivalent e.g. instead of header("HTTP/1.0 404 Not found"); you should use header("Status: 404 Not Found");
Leave it disabled unless you know what you're doing.
fastcgi.impersonateboolFastCGI under IIS (on WINNT based OS) supports the ability to impersonate security tokens of the calling client. This allows IIS to define the security context that the request runs under. mod_fastcgi under Apache does not currently support this feature (03/17/2002). Enable if running under IIS. Default is disabled.
fastcgi.loggingboolTurns on SAPI logging when using FastCGI. Default is to enable logging.
File Uploads
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| file_uploads | "1" | INI_SYSTEM | |
| upload_tmp_dir | NULL | INI_SYSTEM | |
| max_input_nesting_level | 64 | INI_PERDIR | |
| max_input_vars | 1000 | INI_PERDIR | |
| upload_max_filesize | "2M" | INI_PERDIR | |
| max_file_uploads | 20 | INI_PERDIR |
Here's a short explanation of the configuration directives.
file_uploadsboolWhether or not to allow HTTP file uploads. See also the upload_max_filesize, upload_tmp_dir, and post_max_size directives.
upload_tmp_dirstringThe temporary directory used for storing files when doing file upload. Must be writable by whatever user PHP is running as. If not specified PHP will use the system's default.
If the directory specified here is not writable, PHP falls back to the system default temporary directory. If open_basedir is on, then the system default directory must be allowed for an upload to succeed.
upload_max_filesizeintThe maximum size of an uploaded file.
post_max_size must be larger than this value.
When an int is used, the value is measured in bytes. Shorthand notation, as described in this FAQ, may also be used.
max_file_uploadsintThe maximum number of files allowed to be uploaded simultaneously. Upload fields left blank on submission do not count towards this limit.
General SQL
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| sql.safe_mode | "0" | INI_SYSTEM | Removed as of PHP 7.2.0 |
Here's a short explanation of the configuration directives.
sql.safe_modeboolIf turned on, database connection functions that specify default values will use those values in place of any user-supplied arguments. For details on the default values, see the documentation for the relevant connection functions.
WarningThis feature has been REMOVED as of PHP 7.2.0.
Windows Specific
| Name | Default | Changeable | Changelog |
|---|---|---|---|
| windows.show_crt_warning | "0" | INI_ALL |
Here's a short explanation of the configuration directives.
windows.show_crt_warningboolThis directive shows the Windows CRT warnings when enabled.
<?php
$bytes = ini_parse_quantity('2M');
echo $bytes, " bytes\n";
Ожидаемый результат
2097152 bytes
Буква M в конфигурации обозначает двоичный множитель. Перед сравнением лимитов учитывают специальные значения вроде -1 и проверяют документацию конкретной директивы.
Полный список директив php.ini
Директива php.ini действует в определённом SAPI и имеет режим изменяемости. Перед правкой выясняют загруженный файл, дополнительные ini, допустимое место изменения и единицы значения; затем перезапускают или перечитывают нужный процесс и проверяют результат в том же окружении.
Строка каталога состоит минимум из четырёх полей: имя директивы, значение по умолчанию, режим изменяемости и история. Имя копируют точно; default не означает рекомендуемое значение; режим показывает, где настройку разрешено менять; changelog предупреждает об изменении или удалении.
| Режим | Где можно менять |
|---|---|
INI_SYSTEM | Только системная конфигурация: php.ini или конфигурация сервера. |
INI_PERDIR | php.ini, серверная или разрешённая конфигурация каталога; не произвольный ini_set(). |
INI_USER | Пользовательская конфигурация и, если директива допускает, runtime. |
INI_ALL | Допускаются все перечисленные места, но конкретная функция всё равно может иметь дополнительные ограничения. |
Полный официальный договор страницы — большой справочник, раскрывается по запросу
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
Список директив файла php.ini, через которые настраивают PHP.
Столбец «Место изменения» показывает, когда и где разрешено установливать директиву. Информация о значениях этих директив даёт раздел «Места установки параметров конфигурации».
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
This list includes the php.ini directives that can be used to configure PHP.
The "Changeable" column shows the modes determining when and where a directive may be set. See the Changeable mode values section for their definitions.
Секции php.ini
Директива php.ini действует в определённом SAPI и имеет режим изменяемости. Перед правкой выясняют загруженный файл, дополнительные ini, допустимое место изменения и единицы значения; затем перезапускают или перечитывают нужный процесс и проверяют результат в том же окружении.
Полный официальный договор страницы
Ниже сохранён официальный русский текст и структура из зафиксированного архива PHP Manual. Отдельные ещё не переведённые страницы официального русского архива могут оставаться на английском.
В этом списке указаны разделы, в которых вы можете настроить PHP в зависимости от хоста или пути. Эти разделы необязательны.
Данные разделы не имеют прямого влияния на PHP. Они нужны для группировки других директив php.ini вместе и для возможности действовать в зависимости от определённого хоста или пути.
Данные разделы используются только в режиме CGI/FastCGI и в них не могут быть использованы директивы extension и zend_extension.
| Название | Место изменения | История изменений |
|---|---|---|
| [HOST=] | INI_SYSTEM | |
| [PATH=] | INI_SYSTEM |
Краткое разъяснение конфигурационных директив.
[HOST=<host>]Данный раздел позволяет определять набор php.ini директив, которые будут применяться только к указанному хосту.
Пример #1 Активация полного логирования и сообщения об ошибках для dev. домена
[HOST=dev.site.com] error_reporting = E_ALL display_errors = On
[PATH=<path>]Данный раздел позволяет определять набор php.ini директив, которые будут применяться, если скрипт будет запущен из указанного пути.
Пример #2 Добавление скрипта безопасности для защищённых зон
[PATH=/home/site/public/secure] auto_prepend_file=security.php
Нормативный английский оригинал из frozen baseline
Этот слой сохраняет полный договор, если перевод отстаёт. Источник: английский нормативный оригинал.
This list includes the php.ini sections you can set to configure your PHP setup on a per Host or Path basis. These sections are optional.
These sections don't directly affect PHP. They are used to group other php.ini directives together and to get them to act upon a particular host or on a particular path.
These sections are used only in CGI/FastCGI mode and they can not set extension and zend_extension directives.
| Name | Changeable | Changelog |
|---|---|---|
| [HOST=] | INI_SYSTEM | |
| [PATH=] | INI_SYSTEM |
Here's a short explanation of the configuration directives.
[HOST=<host>]This section allows you to define a set of php.ini directives that will take effect on the named host.
Example #1 Activate full on-screen error reporting for dev. domain
[HOST=dev.site.com] error_reporting = E_ALL display_errors = On
[PATH=<path>]This section allows you to define a set of php.ini directives that will take effect when a script runs from the named path.
Example #2 Add security script for protected areas
[PATH=/home/site/public/secure] auto_prepend_file=security.php
Правило одной среды: проверять там, где возникает ошибка
| Симптом | Что проверить |
|---|---|
| CLI видит настройку, сайт — нет | PHP_SAPI, php_ini_loaded_file(), scanned ini и перезапуск FPM. |
| Функция отсутствует | extension_loaded(), пакет ОС, отдельный ini SAPI и версия модуля. |
| Локально работает, на сервере падает | Версия, ОС, права, рабочий каталог, locale, timezone и внешние библиотеки. |
| Изменение ini не действует | Режим PHP_INI_*, место изменения и фактическое значение через ini_get(). |
Источники и обсуждения
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


