- Включить ошибки php ubuntu
- ubuntu php Включить вывод ошибок — белый экран, не отображаются ошибки — решение
- Лог ошибок PHP
- Включение лога ошибок PHP в php.ini
- Как узнать еще режим работы PHP и текущее значение параметра error_log
- Как включить лог ошибок php в .htacccess при использовании Apache с mod_php
Включить ошибки php ubuntu
Поведение этих функций зависит от установок в php.ini .
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
error_reporting | NULL | PHP_INI_ALL | |
display_errors | «1» | PHP_INI_ALL | |
display_startup_errors | «1» | PHP_INI_ALL | До PHP 8.0.0 значение по умолчанию было «0» . |
log_errors | «0» | PHP_INI_ALL | |
log_errors_max_len | «1024» | PHP_INI_ALL | Не имеет смысла в версии PHP 8.0.0, удалено в версии PHP 8.1.0. |
ignore_repeated_errors | «0» | PHP_INI_ALL | |
ignore_repeated_source | «0» | PHP_INI_ALL | |
report_memleaks | «1» | PHP_INI_ALL | |
track_errors | «0» | PHP_INI_ALL | Объявлено устаревшим в PHP 7.2.0, удалено в PHP 8.0.0. |
html_errors | «1» | PHP_INI_ALL | |
xmlrpc_errors | «0» | PHP_INI_SYSTEM | |
xmlrpc_error_number | «0» | PHP_INI_ALL | |
docref_root | «» | PHP_INI_ALL | |
docref_ext | «» | PHP_INI_ALL | |
error_prepend_string | NULL | PHP_INI_ALL | |
error_append_string | NULL | PHP_INI_ALL | |
error_log | NULL | PHP_INI_ALL | |
error_log_mode | 0o644 | PHP_INI_ALL | Доступно, начиная с PHP 8.2.0 |
syslog.facility | «LOG_USER» | PHP_INI_SYSTEM | Доступно, начиная с PHP 7.3.0. |
syslog.filter | «no-ctrl» | PHP_INI_ALL | Доступно, начиная с PHP 7.3.0. |
syslog.ident | «php» | PHP_INI_SYSTEM | Доступно, начиная с PHP 7.3.0. |
Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.
Краткое разъяснение конфигурационных директив.
Задаёт уровень протоколирования ошибки. Параметр может быть либо числом, представляющим битовое поле, либо именованной константой. Соответствующие уровни и константы приведены в разделе Предопределённые константы, а также в php.ini . Для установки настройки во время выполнения используйте функцию error_reporting() . Смотрите также описание директивы display_errors.
Значение по умолчанию равно E_ALL .
До PHP 8.0.0 значение по умолчанию было: E_ALL & ~ E_NOTICE & ~ E_STRICT & ~ E_DEPRECATED . При этой настройке не отображаются уровни ошибок E_NOTICE , E_STRICT и E_DEPRECATED .
Замечание: PHP-константы за пределами PHP
Использование PHP-констант за пределами PHP, например в файле httpd.conf , не имеет смысла, так как в таких случаях требуются целочисленные значения ( int ). Более того, с течением времени будут добавляться новые уровни ошибок, а максимальное значение константы E_ALL соответственно будет расти. Поэтому в месте, где предполагается указать E_ALL , лучше задать большое целое число, чтобы перекрыть все возможные битовые поля. Таким числом может быть, например, 2147483647 (оно включит все возможные ошибки, не только E_ALL ).
Эта настройка определяет, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.
Значение «stderr» посылает ошибки в поток stderr вместо stdout .
Замечание:
Эта функциональность предназначена только для разработки и не должен использоваться в готовых производственных системах (например, системах, имеющих доступ в интернет).
Замечание:
Несмотря на то, что display_errors может быть установлена во время выполнения (функцией ini_set() ), это ни на что не повлияет, если в скрипте есть фатальные ошибки. Это обусловлено тем, что ожидаемые действия программы во время выполнения не получат управления (не будут выполняться).
Даже если display_errors включена, ошибки, возникающие во время запуска PHP, не будут отображаться. Настойчиво рекомендуем включать директиву display_startup_errors только для отладки.
Отвечает за выбор журнала, в котором будут сохраняться сообщения об ошибках. Это может быть журнал сервера или error_log. Применимость этой настройки зависит от конкретного сервера.
Замечание:
Настоятельно рекомендуем при работе на готовых работающих web сайтах протоколировать ошибки там, где они отображаются.
Задание максимальной длины log_errors в байтах. В error_log добавляется информация об источнике. Значение по умолчанию 1024. Установка значения в 0 позволяет снять ограничение на длину log_errors. Это ограничение распространяется на записываемые в журнал ошибки, на отображаемые ошибки, а также на $php_errormsg , но не на явно вызываемые функции, такие как error_log() .
Если используется int , значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ. ignore_repeated_errors bool
Не заносить в журнал повторяющиеся ошибки. Ошибка считается повторяющейся, если происходит в том же файле и в той же строке, и если настройка ignore_repeated_source выключена.
Игнорировать источник ошибок при пропуске повторяющихся сообщений. Когда эта настройка включена, повторяющиеся сообщения об ошибках не будут заноситься в журнал вне зависимости от того, в каких файлах и строках они происходят.
Если настройка включена (по умолчанию), будет формироваться отчёт об утечках памяти, зафиксированных менеджером памяти Zend. На POSIX платформах этот отчёт будет направляться в поток stderr. На Windows платформах он будет посылаться в отладчик функцией OutputDebugString(), просмотреть отчёт в этом случае можно с помощью утилит, вроде » DbgView. Эта настройка имеет смысл в сборках, предназначенных для отладки. При этом E_WARNING должна быть включена в список error_reporting.
Если включена, последняя произошедшая ошибка будет первой в переменной $php_errormsg .
Если разрешена, сообщения об ошибках будут включать теги HTML. Формат для HTML-ошибок производит нажимаемые ссылки, ведущие на описание ошибки, либо функии, в которой она произошла. За такие ссылки ответственны docref_root и docref_ext.
Если запрещена, то ошибки будут выдаваться простым текстом, без форматирования.
Если включена, то нормальное оповещение об ошибках отключается и, вместо него, ошибки выводятся в формате XML-RPC.
Используется в качестве значения XML-RPC элемента faultCode.
Новый формат ошибок содержит ссылку на страницу с описанием ошибки или функции, вызвавшей эту ошибку. Можно разместить копию описаний ошибок и функций локально и задать ini директиве значение URL этой копии. Если, например, локальная копия описаний доступна по адресу «/manual/» , достаточно прописать docref_root=/manual/ . Дополнительно, необходимо задать значение директиве docref_ext, отвечающей за соответствие расширений файлов файлам описаний вашей локальной копии, docref_ext=.html . Также возможно использование внешних ссылок. Например, docref_root=http://manual/en/ или docref_root=»http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F»
В большинстве случаев вам потребуется, чтобы значение docref_root оканчивалось слешем «/» . Тем не менее, бывают случаи, когда это не требуется (смотрите выше, второй пример).
Замечание:
Эта функциональность предназначена только для разработки, так как он облегчает поиск описаний функций и ошибок. Не используйте его в готовых производственных системах (например, имеющих доступ в интернет).
Замечание:
Значение docref_ext должно начинаться с точки «.» .
Строка, которая будет выводиться непосредственно перед сообщением об ошибке. Используется только тогда, когда на экране отображается сообщение об ошибке. Основная цель — добавить дополнительную HTML-разметку к сообщению об ошибке.
Строка, которая будет выводиться после сообщения об ошибке. Используется только тогда, когда на экране отображается сообщение об ошибке. Основная цель — добавить дополнительную HTML-разметку к сообщению об ошибке.
Имя файла, в который будут добавляться сообщения об ошибках. Файл должен быть открыт для записи пользователем веб-сервера. Если используется специальное значение syslog , то сообщения будут посылаться в системный журнал. На Unix-системах это syslog(3), на Windows NT — журнал событий. Смотрите также: syslog() . Если директива не задана, ошибки будут направляться в SAPI журналы. Например, это могут быть журналы ошибок Apache или поток stderr командной строки CLI. Смотрите также функцию error_log() .
Указывает, какой тип программы регистрирует сообщение. Действует только в том случае, если опция error_log установлена в «syslog».
- all – строка будет разделена на символы новой строки и все символы будут переданы без изменений
- ascii – строка будет разделена на символы новой строки, а любые непечатаемые 7-битные символы ASCII будут экранированы
- no-ctrl – строка будет разделена на символы новой строки, а любые непечатаемые символы будут экранированы
- raw – все символы передаются в системный журнал без изменений, без разделения на новые строки (идентично PHP до 7.3)
Замечание:
Тип фильтра raw доступен начиная с PHP 7.3.8 и PHP 7.4.0.
Определяет строку идентификатора, которая добавляется к каждому сообщению. Действует только в том случае, если опция error_log установлена в «syslog».
ubuntu php Включить вывод ошибок — белый экран, не отображаются ошибки — решение
Чтобы включить отображение ошибок на локальной машине, в файле конфигурации php.ini вам необходимо изменить несколько настроек, сохранить этот файл и перезапустить php, подробности далее.
- Определяем где именно лежит файл php.ini в вашем случае.
- Открываем его, например, с помощью nano
- Находим в файле (используйте «горячие клавиши» для поиска) следующие настройки и меняем их значения на (в тех строка файла, что НЕ начинаются с точки запятой):
error_reporting = E_ALL display_errors = On display_startup_errors = On
ПОЯСНЕНИЕ: с точки запятой начинаются комментарии с описанием и просто закомментированные блоки настроек, например, когда вы будете искать текущее значение опции error_reporting вы можете наткнуться на блок вроде:
; error_reporting
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
— это не то, что что нам нужно. Нам нужны строки, которые начинаются не с точки запятой, например, значение по умолчанию для этой инструкции может выглядеть так:
Теперь ошибки должны отображаться нормально)
Лог ошибок PHP
Когда на сервере не работает один из сайтов — причины следует искать в программном коде, прежде всего следует изучить лог ошибок РНР (актуально для большинства сайтов, РНР является самым популярным языком веб-программирования). В рамках материала рассмотрено как включить лог ошибок php.
Включение лога ошибок PHP в php.ini
Все параметры РНР — в том числе, версия — задаются в файле php.ini, в нем же включается ведение лога программных ошибок. Если для сервера используется какая-либо панель управления — логирование можно включить в ней, если настройки сделаны вручную, то и ведение лога нужно включать вручную.
Делается это следующим образом:
display_errors = Off
log_errors = On
error_log = /var/log/php-errors.log
При активации display_errors ошибки будут выводится на экран, в директиве error_log задается путь к файлу, в который будет писаться информация необходимая для отладки проекта.
Затем нужно создать файл php-errors.log, на него необходимо выставить права позволяющие веб-серверу записывать в файл данные. В Debian подобных системах Apache работает от имени системного пользователя www-data
Затем нужно перезапустить веб-сервер, для Debian/Ubuntu
Получилось или нет можно увидеть в phpinfo. Там же можно посмотреть режим работы РНР (если это Apache Handler, то есть еще один способ включения лога, об этом ниже).
Как узнать еще режим работы PHP и текущее значение параметра error_log
Можно создать в корне сайта, работающего с сервера файл phpinfo и поместить в него одну функцию
И обратиться к файлу из браузера
http://sitename.com/phpinfo.php
Если применяются редиректы может потребоваться временно переименовать файл .htaccess в корне сайта.
В выводе phpinfo.php можно будет увидеть всю информацию о существующих настройках РНР
Режим работы РНР в примере Apache 2.0 Handler — РНР работает в режиме модуля веб-сервера.
Значение error_log отсутствует, значит в данной конфигурации логирование на уровне конфигурации сервера не включено.
Описанный выше порядок действий позволит включить логирование ошибок РНР при любом режиме работы РНР. При отладке работы сайта при конфигурации с mod-apache следует также проверять логи веб-сервера.
Вся информация будет в них, логи нужно искать в /var/log/apache2 и /var/log/httpd в зависимости от дистрибутива. Лог можно найти выполнив
Как включить лог ошибок php в .htacccess при использовании Apache с mod_php
При использовании Apache с mod_php есть альтернативный вариант не требующий редактирования php.ini.
В .htaccess в корне сайта добавляется:
php_flag log_errors On
php_value error_log /var/log/php-errors.log
Выключается логирование установкой основной опции в Off
php_flag log_errors Off
Плюс такого способа в том, что его можно использовать на серверах где нет root доступа. Настройки будут применяться не ко всему серверу, а только к сайту в корне которого добавлен .htaccess.
С fast_cgi директива php_flag работать не будет — возникнет ошибка 500.
Читайте про ошибку 500 и ее причины. Очень часто она появляется как следствие неверной отработки скриптов или настроек сервера не удовлетворяющим требованиям программного кода сайта.