https://haydenjames.io/understanding-php-memory_limit/ explains the memory_limit setting nicely.
Список включает встроенные директивы файла 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 | |
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_tag
bool
Определяет, разрешается ли короткая форма записи (<? ?>
)
тегов PHP. Если вы хотите использовать PHP совместно с XML, вы можете отключить эту
опцию, чтобы беспрепятственно использовать <?xml ?>
.
В противном случае, вы можете отобразить это при помощи PHP, например:
<?php echo '<?xml version="1.0"?>'; ?>
.
Если же эта опция отключена, вы должны использовать длинную форму
открывающего тега PHP (<?php ?>
).
Замечание:
Эта директива не влияет на сокращение
<?=
, которое всегда доступно.
precision
int
-1
означает, что будет использован усовершенствованный алгоритм
для округления таких чисел.
serialize_precision
int
-1
означает, что будет использован усовершенствованный алгоритм
для округления таких чисел.
expose_php
bool
Выдаёт факт присутствия PHP на сервере, включая передачу версии PHP в HTTP-заголовке (например, X-Powered-By: PHP/5.3.7).
disable_functions
string
disable_classes
string
Эта директива отключает отдельные классы. Директива принимает разделённый запятыми список имён классов. Отключение класса просто предотвращает создание экземпляра класса.
Директива отключает только внутренние классы. Директива не затрагивает пользовательские классы.
Директиву требуется установливать в файле php.ini. Директиву нельзя устанавливать в файле httpd.conf.zend.assertions
int
1
, проверочный код будет исполняться (режим
разработки). Если задали 0
, PHP сгенерирует код проверок, однако,
исполнять не будет. Если задали значение -1
, проверочный код не будет
генерироваться (продуктивный режим).
Замечание:
Если процесс запустили в режиме релиза, значение директивы zend.assertions нельзя будет изменить во время выполнения, поскольку код утверждений не генерируется.
Если процесс запустили в режиме разработки, для директивы zend.assertions нельзя будет установить значение
-1
во время выполнения.
zend.exception_string_param_max_len
int
"0"
до "1000000"
.
hard_timeout
int
Когда истечёт время ожидания, которое установили в директиве 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_args
bool
Исключает аргументы из трассировки стека, сгенерированных из исключений.
zend.multibyte
bool
Разрешает парсинг исходных файлов в многобайтных кодировках. Включение zend.multibyte требуется для использования кодировок символов подобных SJIS, BIG5 и т. д., содержащих специальные символы в многобайтных строковых данных. Совместимые с ISO-8859-1 кодировки, например UTF-8, EUC и т. д., не требуют эту опцию.
Модуль zend.multibyte требует установленного модуля "mbstring".
zend.script_encoding
string
PHP будет использовать это значение только при отсутствии директивы declare(encoding=...) в начале скрипта. В кодировках, которые несовместимы с кодировкой ISO-8859-1, требуется включить и опцию zend.multibyte, и опцию zend.script_encoding.
Литеральные строки должны быть транслитерированы из zend.script_encoding в mbstring.internal_encoding, как если бы вызвали функцию mb_convert_encoding().
zend.detect_unicode
bool
Определяет, нужно ли проверять BOM (Byte Order Mark, метка порядка байтов) и корректность многобайтных символов в файле. Эта проверка производится до вызова __halt_compiler(). Доступна только в режиме Zend Multibyte.
zend.signal_check
bool
Определяет, нужно ли проверять заменённые обработчики сигналов при завершении скрипта.
exit_on_timeout
bool
Эта директива только для Apache1 mod_php, которая заставляет потомка Apache завершиться, если превышено время ожидания исполнения скрипта PHP. Превышение времени ожидания приводит к внутреннему вызову longjmp() в Apache1, который оставляет некоторые модули в несогласованном состоянии. По завершении процесса все неснятые блокировки или память будут очищены.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
memory_limit | "128M" | INI_ALL |
Краткое разъяснение конфигурационных директив.
memory_limit
int
Эта директива задаёт максимальный объем памяти в байтах, который разрешается
использовать скрипту. Это помогает предотвратить ситуацию, при которой плохо
написанный скрипт съедает всю доступную память сервера. Чтобы убрать
ограничения, установите для этой директивы значение -1
.
Смотрите также описание директивы: 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_size
int
Определяет размера кеша realpath, который будет использовать PHP. Это значение требуется увеличить в системах, в которых PHP открывает много файлов, чтобы отразить количество файловых операций, которые выполнил PHP.
Размер — общее количество байтов в сохранённых строках путей, плюс размер данных, которые связаны с записью кеша. Это значит, что для хранения длинных путей в кеше, размер этого кеша должен быть больше. Это значение не определяет напрямую количество разных путей, которые PHP может закешировать.
Размер, который требуется для кеширования, зависит от системы.
realpath_cache_ttl
int
Время в секундах, в течение которого 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 |
|
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.output
string
Этот разделитель используется в генерируемых PHP URL в качестве разделителя аргументов.
arg_separator.input
string
Список разделителей, используемых PHP для получения переменных из URL.
Замечание:
Каждый символ в этой директиве считается разделителем!
variables_order
string
Устанавливает порядок обработки переменных EGPCS
(E
nvironment,
G
et, P
ost,
C
ookie, и S
erver).
Например, если variables_order установлена в "SP"
,
то PHP создаст superglobals $_SERVER и
$_POST, но не будет создавать
$_ENV, $_GET и
$_COOKIE. Установка в "" означает, что ни
одна superglobals не будет установлена.
В CGI и FastCGI SAPI,
в $_SERVER также добавляются значения
переменных окружения; S
всегда эквивалентна ES
вне зависимости от
самого положения E
в этой директиве.
Замечание:
Эта директива также влияет на содержимое и порядок переменной $_REQUEST.
request_order
string
Эта директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST. Добавление производится слева направо, новые значения перезаписывают старые.
Если значение этой директивы не установлено, то используется значение директивы variables_order для содержимого переменной $_REQUEST.
Учтите, что файлы php.ini, поставляемые с дистрибутивом,
по соображениям безопасности не содержат значение 'C'
(cookies).
auto_globals_jit
bool
Когда включено, переменные SERVER, REQUEST и ENV создаются в тот момент, когда они впервые используются (Just In Time), а не в начале выполнения скрипта. Если эти переменные в скрипте не используются, включение этой директивы приведёт к росту производительности.
Использование переменных SERVER, REQUEST и ENV проверяется на стадии компиляции, поэтому их использование с помощью, например, переменных переменных не запустит их инициализацию.
register_argc_argv
bool
enable_post_data_reading
bool
post_max_size
int
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, поскольку это приведёт к ошибке скрипта.
Версия | Описание |
---|---|
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_file
string
Определяет имя файла, который будет автоматически обрабатываться перед основным файлом. Файл вызывается так, будто он был подключён при помощи функции require, так что include_path также используется.
Специальное значение none
отключает эту директиву.
auto_append_file
string
Определяет имя файла, который будет автоматически обрабатываться после основного файла. Файл вызывается так, будто он был подключён при помощи функции require, так что include_path тоже используется.
Специальное значение none
отключает эту директиву.
Замечание: Если скрипт завершает работу при помощи exit(), auto-append НЕ выполняется.
default_mimetype
string
По умолчанию PHP выводит название кодировки в заголовке Content-Type. Если передавать кодировку не требуется, просто оставьте эту опцию пустой.
"media type" по умолчанию установлен как "text/html".
default_charset
string
"UTF-8" — значение по умолчанию и используется как
кодировка по умолчанию для функций
htmlentities(),
html_entity_decode()
и htmlspecialchars(), если параметр
encoding
не указали. Значение
default_charset
также используется для указания
кодировки по умолчанию для функций iconv, если
конфигурационные опции
iconv.input_encoding
, iconv.output_encoding
и
iconv.internal_encoding
не установлены, и для функций
mbstring, если не установлены
mbstring.http_input
mbstring.http_output
mbstring.internal_encoding
.
Все версии PHP используют это значение как кодировку для стандартного заголовка Content-Type, отправляемого PHP, если этот заголовок не переопределён вызовом функции header().
Не рекомендуется устанавливать default_charset
в пустое значение.
input_encoding
string
Эта опция используется для многобайтных модулей, таких как mbstring и iconv. По умолчанию пусто.
output_encoding
string
Эта опция используется для многобайтных модулей, таких как mbstring и iconv. По умолчанию пусто.
internal_encoding
string
Эта опция используется для многобайтных модулей, таких как 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_path
string
Указывает список директорий, в которых функции require, include, fopen(), file(), readfile() и file_get_contents() ищут файлы. Формат соответствует формату системной переменной окружения PATH: список директорий, разделённых двоеточием в Unix или точкой с запятой в Windows.
При поиске подключаемых файлов PHP отдельно рассматривает каждое
значение в include_path.
Он проверяет первый путь, если файл в нем не найден, то он переходит
к следующему, и так до тех пор, пока не найдёт подключаемый файл, либо
вернёт
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_basedir
string
Ограничивает для 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_root
string
"Корневая директория" PHP на этом сервере. Используется только в случае, если не пустая. Если PHP не был скомпилирован с FORCE_REDIRECT, вам следует установить doc_root, если вы используете PHP в качестве CGI под любым веб-сервером (кроме IIS). Альтернативой является использование конфигурационной директивы cgi.force_redirect, речь о которой идёт ниже.
user_ini.cache_ttl
int
user_ini.filename
string
user_dir
string
Базовое имя директории, используемой в домашнем каталоге пользователя для PHP файлов, например, public_html.
extension_dir
string
В какой директории PHP должен искать динамически загружаемые модули. Рекомендуется указывать абсолютный путь. Смотрите также: enable_dl и dl().
extension
string
Какие динамически загружаемые модули должны быть загружены при старте PHP.
zend_extension
string
Имя динамически загружаемого модуля Zend (например, XDebug), который должен быть загружен при старте PHP.
cgi.check_shebang_line
bool
Контролирует, нужно ли проверять первую строку CGI
PHP-скрипта на содержание #!
(shebang).
Эта строка может быть необходима, если скрипт должен поддерживать как отдельный
запуск, так и с помощью PHP CGI. PHP в режиме
CGI пропускает эту строку и игнорирует её
содержимое, если данная директива включена.
cgi.discard_path
bool
Если разрешено, бинарный файл PHP CGI может безопасно располагаться вне веб-дерева и люди не смогут обойти безопасность .htaccess.
cgi.fix_pathinfo
bool
Обеспечивает поддержку правильных
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_redirect
bool
Директива cgi.force_redirect необходима для обеспечения безопасности во время работы PHP в качестве CGI под большинством веб-серверов. Если оставить её неопределённой, по умолчанию PHP включает эту директиву. Вы можете выключить её на свой страх и риск.
Замечание:
Пользователям Windows: При использовании IIS эта опция должна быть отключена. Тоже самое необходимо для OmniHTTPD и Xitami.
cgi.nph
bool
Если cgi.nph разрешена, cgi будет принудительно возвращать код 200 на каждый запрос.
cgi.redirect_status_env
string
Если cgi.force_redirect включена и вы работаете не под веб-сервером Apache или Netscape (iPlanet), вам может понадобиться установить переменную окружения, которую будет искать PHP чтобы убедиться, что он может продолжать выполнение.
Замечание:
Установка этой переменной может повлечь за собой проблемы с безопасностью, так что вы должны знать, что вы делаете.
cgi.rfc2616_headers
int
Сообщает PHP, какой тип заголовков использовать при отправке кода ответа HTTP. Если установлено в 0, PHP отправляет » RFC 3875 заголовок "Status:", который поддерживается Apache и другими веб-серверами. Если установлено в 1, PHP отправляет заголовки, соответствующие » RFC 2616.
Если эта опция включена и вы используете PHP в окружении CGI (например, PHP-FPM), то вместо использования HTTP-заголовков ответа в стиле RFC 2616, нужно использовать их эквивалент из стандарта RFC 3875, например, вместо header("HTTP/1.0 404 Not found"); нужно использовать header("Status: 404 Not Found");
Оставьте в значении 0, если вы не уверены в том, что это значит.
fastcgi.impersonate
string
FastCGI под IIS (в ОС на базе WINNT) поддерживает возможность имперсонации прав безопасности вызывающего клиента. Это позволяет IIS определить контекст безопасности, в котором выполняется запрос. mod_fastcgi под Apache на текущий момент не поддерживает эту возможность (03/17/2002). Установите в 1 при работе под IIS. Значение по умолчанию - ноль.
fastcgi.logging
bool
Включает логирование SAPI при использовании 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_uploads
bool
Разрешать или не разрешать закачивание файлов. Смотрите также директивы upload_max_filesize, upload_tmp_dir и post_max_size.
upload_tmp_dir
string
Временная директория для хранения файлов при передаче. Каталог должен быть доступен для записи пользователю, от имени которого запустили PHP. PHP будет использовать системную директорию по умолчанию, если каталог не указали.
Если к указанной директории нет прав на запись, PHP откатится обратно к системной временной директории по умолчанию. Если включили директиву open_basedir, то для успешной передачи файлов необходимо разрешить системный каталог по умолчанию.
upload_max_filesize
int
Максимальный размер закачиваемого файла.
post_max_size должен быть больше, чем это значение.
Объём измеряется в байтах, если значение параметра указали как целое число (int). Параметр также принимает значения в сокращённой нотации, которую описывает раздел FAQ.max_file_uploads
int
Максимально разрешённое количество одновременно закачиваемых файлов. Пустые поля загрузки не рассматриваются этим ограничением.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
sql.safe_mode | "0" | INI_SYSTEM |
Удалён в PHP 7.2.0 |
Краткое разъяснение конфигурационных директив.
sql.safe_mode
bool
Если включена, функции соединения с базой данных, использующие значения по умолчанию, будут использовать эти значения вместо любых передаваемых аргументов. Для значений по умолчанию смотрите документацию по функциям подключения соответствующей базы данных.
Эта опция УДАЛЕНА в PHP 7.2.0.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
windows.show_crt_warning | "0" | INI_ALL |
Краткое разъяснение конфигурационных директив.
windows.show_crt_warning
bool
При включении данной директивы будут отображаться предупреждения Windows CRT.
https://haydenjames.io/understanding-php-memory_limit/ explains the memory_limit setting nicely.
Be careful while using auto_prepend_file.
When the custom exception handler, set by set_exception_handler(), handles an uncaught exception, it interrupts the execution of every script.
If the script with the unhandled exception has been automatically prepended or included by an automatically prepended script, however, the main script will continue running anyway.
This could cause several issues: when we think that throwing an exception would automatically interrupt the current application, a whole chunk of code is going to run anyway.
Note regarding the upload_tmp_dir setting and UNC Paths:
When using PHP on Windows OS and IIS FastCGI, if you need to use a UNC path to a folder on a network drive for the upload_tmp_dir setting then you must use three \ characters at the front of the UNC path.
Windows and PHP use the first slash as an escape character, so if you only use two slashes then it passes a UNC path with just one backslash. That is not valid for UNC paths and you many experience problems when uploading files, such as errors saying that "PHP is missing a temporary folder".
Correct:
upload_tmp_dir = "\\\path\to\your\folder"
Incorrect:
upload_tmp_dir = "\\path\to\your\folder"
This might help in case someone happens to maintain old applications with a charset other than utf-8.
According to the docs, you can override the default charset if you use `header()`.
Suppose php.ini sets the default_charset to "UTF-8", but you need a legacy charset, like ISO-8859-1.
Still,
<?php header('Content-Type: text/html; Charset=ISO-8859-1'); ?>
would not override the charset, just add it as well and the result
was a response header like (note the two charsets):
Content-Type:"text/html; Charset=ISO-8859-1;charset=UTF-8"
I found it strange the default one as `charset` with a lowercase `c`
as opposed to my custom charset with an uppercase `C`.
What solved was to _override_ the charset using all lowercase letters
as well for the word “charset”:
<?php header('content-type: text/html; charset=ISO-8859-1'); ?>
Then, the double charset from the response headers disappeared, and only the single, custom charset remained.
you get a misleading error if a directory doesn't exist or the user lacks permission to access it.
open_basedir restriction in effect. File(/tmp/php_session) is not within the allowed path(s): /tmp/php_session
"If the size of post data is greater than post_max_size..."
It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo
If you use Microsoft IIS Windows and want to use open_basedir restrictions with multiple dirs you have to set them into single quotes in the main config xml file of IIS (C:\Windows\System32\inetsrv\config\applicationHost.config). Works fine in IIS 10.
Multiple files with single quotes and ; for windows:
"C:\php\php-cgi.exe|-d open_basedir='C:\Windows\Temp\;D:\mywebsite1\'"
Only one dir works fine without single quotes:
"C:\php\php-cgi.exe|-d open_basedir=D:\mywebsite1\"
In my main config xml file of IIS there are 2 nodes to set per website and the definitions have to be equal:
configuration\Location\system.webServer\handlers\add
configuration\system.webServer\fastCgi
I had a problem with 'open_basedir =' string in php.ini. This string was writtren in VirtualHost Directory directive of Apache2 and successfully rewrote the same php.ini setting! It happened with VestaCP, but I think, it's a common way. Goog luck!
It appears that if you use both the 'include_path' directives and 'open_basedir', that file searches will hit the include path *first*, before local files. But if 'open_basedir' is not in use, then local files are found first. For example, suppose you have code in '/var/www/myfile.php' which does:
<?php
require_once('config.php');
?>
Further, assume that there is a local file '/var/www/config.php', and there is also a file '/var/local/php/config.php'.
Next, if your php.ini has:
include_path = /var/local/php/
Normally, this would look for '/var/www/config.php' first, and if not found, then it would try '/var/local/php/config.php'.
But if you also have this in php.ini:
open_basedir = /var/www/:/var/local/php/
Then the require would reverse the order of the search, and load '/var/local/php/config.php', even when the local 'config.php' file exists.
Furthermore, if include_path contains directories not in open_basedir, you can end up with a fatal error. For example, change the directive to:
open_basedir = /var/www/:/var/local/includes/php/
Now the require will first find '/var/local/php/config.php' from the include_path, try to include it, but be unable to because of the open_basedir restrictions.