Php вывод ошибок в браузер
PHP предлагает гибкие настройки вывода ошибок, среди которых функия error_reporting($level) – задает, какие ошибки PHP попадут в отчет, могут быть значения:
- E_ALL – все ошибки,
- E_ERROR – критические ошибки,
- E_WARNING – предупреждения,
- E_PARSE – ошибки синтаксиса,
- E_NOTICE – замечания,
- E_CORE_ERROR – ошибки обработчика,
- E_CORE_WARNING – предупреждения обработчика,
- E_COMPILE_ERROR – ошибки компилятора,
- E_COMPILE_WARNING – предупреждения компилятора,
- E_USER_ERROR – ошибки пользователей,
- E_USER_WARNING – предупреждения пользователей,
- E_USER_NOTICE – уведомления пользователей.
Вывод ошибок в браузере
В htaccess
На рабочем проекте вывод ошибок лучше сделать только у авторизированного пользователя или в крайнем случаи по IP.
Запись ошибок в лог файл
Файлы логов также не должны быть доступны из браузера, храните их в закрытой директории с файлом .htaccess:
Или запретить доступ к файлам по расширению .log (заодно и другие системные файлы и исходники):
Отправка ошибок на e-mail
Ошибки можно отправлять на е-mail разработчика, но приведенные методы не работает при критических ошибках.
Первый – register_shutdown_function() регистрирует функцию, которая выполнится при завершении работы скрипта, error_get_last() получает последнюю ошибку.
Стоит учесть что оператор управления ошибками (знак @) работать в данном случаи не будет и письмо будет отправляться при каждой ошибке.
Второй метод использует «пользовательский обработчик ошибок», поэтому в браузер ошибки выводится не будут.
Пользовательские ошибки
PHP позволяет разработчику самому объявлять ошибки, которые выведутся в браузере или в логе. Для создания ошибки используется функция trigger_error() :
Результат:
Комментарии 1
Другие публикации
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет.
JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар <ключ: значение>. Значение может быть массивом, числом, строкой и.ключ:>
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют.
Поведение этих функций зависит от установок в 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 | |
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 | |
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 . Для установки настройки во время выполнения используйте функцию error_reporting() . Смотрите также описание директивы display_errors.
Значение по умолчанию равно E_ALL .
До PHP 8.0.0 значение по умолчанию было: E_ALL & ~ E_NOTICE & ~ E_STRICT & ~ E_DEPRECATED . При этой настройке не отображаются уровни ошибок E_NOTICE , E_STRICT и E_DEPRECATED .
Эта настройка определяет, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.
Значение "stderr" посылает ошибки в поток stderr вместо stdout .
Замечание:
Эта функциональность предназначена только для разработки и не должен использоваться в готовых производственных системах (например, системах, имеющих доступ в интернет).
Замечание:
Несмотря на то, что display_errors может быть установлена во время выполнения (функцией ini_set() ), это ни на что не повлияет, если в скрипте есть фатальные ошибки. Это обусловлено тем, что ожидаемые действия программы во время выполнения не получат управления (не будут выполняться).
Даже если display_errors включена, ошибки, возникающие во время запуска PHP, не будут отображаться. Настойчиво рекомендуем включать директиву display_startup_errors только для отладки.
Замечание:
Настоятельно рекомендуем при работе на готовых работающих 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 .
Если запрещена, то ошибки будут выдаваться простым текстом, без форматирования.
Если включена, то нормальное оповещение об ошибках отключается и, вместо него, ошибки выводятся в формате 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 должно начинаться с точки "." .
- all – строка будет разделена на символы новой строки и все символы будут переданы без изменений
- ascii – строка будет разделена на символы новой строки, а любые непечатаемые 7-битные символы ASCII будут экранированы
- no-ctrl – строка будет разделена на символы новой строки, а любые непечатаемые символы будут экранированы
- raw – все символы передаются в системный журнал без изменений, без разделения на новые строки (идентично PHP до 7.3)
Замечание:
Тип фильтра raw доступен начиная с PHP 7.3.8 и PHP 7.4.0.
Функция error_reporting() задаёт значение директивы error_reporting во время выполнения. В PHP есть много уровней ошибок. Используя эту функцию, можно задать уровень ошибок времени выполнения скрипта, которые попадут в отчёт. Если необязательный аргумент error_level не задан, error_reporting() вернёт текущее значение уровня протоколирования ошибок.
Список параметров
Новое значение уровня error_reporting. Это может быть битовая маска или именованные константы. При использовании именованных констант нужно будет следить за совместимостью с новыми версиями PHP. В новых версиях могут добавиться новые уровни ошибок, увеличиться диапазон целочисленных типов. Все это может привести к нестабильной работе при использовании старых целочисленных обозначений уровней ошибок.
Доступные константы уровней ошибок и их описания приведены в разделе Предопределённые константы.
Возвращаемые значения
Возвращает старое значение уровня error_reporting либо текущее значение, если аргумент error_level не задан.
Список изменений
Версия | Описание |
---|---|
8.0.0 | error_level теперь допускает значение null. |
Примеры
// Выключение протоколирования ошибок
error_reporting ( 0 );
// Включать в отчёт простые описания ошибок
error_reporting ( E_ERROR | E_WARNING | E_PARSE );
// Добавлять в отчёт все ошибки PHP
error_reporting ( E_ALL );
// Добавлять в отчёт все ошибки PHP
error_reporting (- 1 );
// То же, что и error_reporting(E_ALL);
ini_set ( 'error_reporting' , E_ALL );
Примечания
Если передать -1 , будут отображаться все возможные ошибки, даже если в новых версиях PHP добавятся уровни или константы. Поведение эквивалентно передаче константы E_ALL .
Смотрите также
- Директива display_errors
- Директива html_errors
- Директива xmlrpc_errors
- ini_set() - Устанавливает значение настройки конфигурации
User Contributed Notes 27 notes
If you just see a blank page instead of an error reporting and you have no server access so you can't edit php configuration files like php.ini try this:
- create a new file in which you include the faulty script:
error_reporting ( E_ALL );
ini_set ( "display_errors" , 1 );
include( "file_with_errors.php" );
?>
- execute this file instead of the faulty script file
now errors of your faulty script should be reported.
this works fine with me. hope it solves your problem as well!
Under PHP 8.0, error_reporting() does not return 0 when then the code uses a @ character.
$a = $array [ 20 ]; // error_reporting() returns 0 in php =8
The example of E_ALL ^ E_NOTICE is a 'bit' confusing for those of us not wholly conversant with bitwise operators.
If you wish to remove notices from the current level, whatever that unknown level might be, use & ~ instead:
//.
$errorlevel = error_reporting ();
error_reporting ( $errorlevel & ~ E_NOTICE );
//. code that generates notices
error_reporting ( $errorlevel );
//.
?>
^ is the xor (bit flipping) operator and would actually turn notices *on* if they were previously off (in the error level on its left). It works in the example because E_ALL is guaranteed to have the bit for E_NOTICE set, so when ^ flips that bit, it is in fact turned off. & ~ (and not) will always turn off the bits specified by the right-hand parameter, whether or not they were on or off.
The error_reporting() function won't be effective if your display_errors directive in php.ini is set to "Off", regardless of level reporting you set. I had to set
display_errors = On
error_reporting = ~E_ALL
to keep no error reporting as default, but be able to change error reporting level in my scripts.
I'm using PHP 4.3.9 and Apache 2.0.
Some E_STRICT errors seem to be thrown during the page's compilation process. This means they cannot be disabled by dynamically altering the error level at run time within that page.
The work-around for this was to rename the file and replace the original with a error_reporting() call and then a require() call.
Ex, rename index.php to index.inc.php, then re-create index.php as:
error_reporting ( E_ALL & ~( E_STRICT | E_NOTICE ));
require( 'index.inc.php' );
?>
That allows you to alter the error reporting prior to the file being compiled.
I discovered this recently when I was given code from another development firm that triggered several E_STRICT errors and I wanted to disable E_STRICT on a per-page basis.
To expand upon the note by chris at ocproducts dot com. If you prepend @ to error_reporting(), the function will always return 0.
error_reporting ( E_ALL );
var_dump (
error_reporting (), // value of E_ALL,
@ error_reporting () // value is 0
);
?>
If you are using the PHP development server, run from the command line via `php -S servername:port`, every single error/notice/warning will be reported in the command line itself, with file name, and line number, and stack trace.
So if you want to keep a log of all the errors even after page reloads (for help in debugging, maybe), running the PHP development server can be useful.
This article refers to these two reporting levels:
// Report all PHP errors (see changelog)
error_reporting(E_ALL);
// Report all PHP errors
error_reporting(-1);
What is the difference between those two levels?
Please update this article with a clear explanation of the difference and the possible use cases.
To enable error reporting for *ALL* error messages including every error level (including E_STRICT, E_NOTICE etc.), simply use:
see more information about php 5.3 deprecated errors
this is to show all errors for code that may be run on different versions
for php 5 it shows E_ALL^E_STRICT and for other versions just E_ALL
if anyone sees any problems with it please correct this post
ini_set ( 'error_reporting' , version_compare ( PHP_VERSION , 5 , '>=' ) && version_compare ( PHP_VERSION , 6 , ' ?>
I always code with E_ALL set.
After a couple of pages of
$username = (isset( $_POST [ 'username' ]) && !empty( $_POST [ 'username' ])).
?>
I made this function to make things a little bit quicker. Unset values passed by reference won't trigger a notice.
function test_ref (& $var , $test_function = '' , $negate = false ) $stat = true ;
if(!isset( $var )) $stat = false ;
if (!empty( $test_function ) && function_exists ( $test_function )) $stat = $test_function ( $var );
$stat = ( $negate ) ? $stat ^ 1 : $stat ;
>
elseif( $test_function == 'empty' ) $stat = empty( $var );
$stat = ( $negate ) ? $stat ^ 1 : $stat ;
>
elseif (! function_exists ( $test_function )) $stat = false ;
trigger_error ( " $test_function () is not a valid function" );
>
$stat = ( $stat ) ? true : false ;
return $stat ;
>
$a = '' ;
$b = '15' ;
test_ref ( $a , 'empty' , true ); //False
test_ref ( $a , 'is_int' ); //False
test_ref ( $a , 'is_numeric' ); //False
test_ref ( $b , 'empty' , true ); //true
test_ref ( $b , 'is_int' ); //False
test_ref ( $b , 'is_numeric' ); //false
test_ref ( $unset , 'is_numeric' ); //false
test_ref ( $b , 'is_number' ); //returns false, with an error.
?>
If you want to see all errors in your local environment, you can set your project URL like "foo.com.local" locally and put that in bootstrap file.
if ( substr ( $_SERVER [ 'SERVER_NAME' ], - 6 ) == '.local' ) ini_set ( 'display_errors' , 1 );
ini_set ( 'error_reporting' , E_ALL );
// or error_reporting(E_ALL);
>
?>
error_reporting() has no effect if you have defined your own error handler with set_error_handler()
[Editor's Note: This is not quite accurate.
E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR and E_COMPILE_WARNING error levels will be handled as per the error_reporting settings.
All other levels of errors will be passed to the custom error handler defined by set_error_handler().
Zeev Suraski suggests that a simple way to use the defined levels of error reporting with your custom error handlers is to add the following line to the top of your error handling function:
The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script. If the optional error_level is not set, error_reporting() will just return the current error reporting level.
Parameters
The new error_reporting level. It takes on either a bitmask, or named constants. Using named constants is strongly encouraged to ensure compatibility for future versions. As error levels are added, the range of integers increases, so older integer-based error levels will not always behave as expected.
The available error level constants and the actual meanings of these error levels are described in the predefined constants.
Return Values
Returns the old error_reporting level or the current level if no error_level parameter is given.
Changelog
Version | Description |
---|---|
8.0.0 | error_level is nullable now. |
Examples
// Turn off all error reporting
error_reporting ( 0 );
// Report simple running errors
error_reporting ( E_ERROR | E_WARNING | E_PARSE );
// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings . )
error_reporting ( E_ERROR | E_WARNING | E_PARSE | E_NOTICE );
// Report all errors except E_NOTICE
error_reporting ( E_ALL & ~ E_NOTICE );
// Report all PHP errors
error_reporting ( E_ALL );
// Report all PHP errors
error_reporting (- 1 );
// Same as error_reporting(E_ALL);
ini_set ( 'error_reporting' , E_ALL );
Notes
Passing in the value -1 will show every possible error, even when new levels and constants are added in future PHP versions. The behavior is equivalent to passing E_ALL constant.
See Also
- The display_errors directive
- The html_errors directive
- The xmlrpc_errors directive
- ini_set() - Sets the value of a configuration option
User Contributed Notes 27 notes
If you just see a blank page instead of an error reporting and you have no server access so you can't edit php configuration files like php.ini try this:
- create a new file in which you include the faulty script:
error_reporting ( E_ALL );
ini_set ( "display_errors" , 1 );
include( "file_with_errors.php" );
?>
- execute this file instead of the faulty script file
now errors of your faulty script should be reported.
this works fine with me. hope it solves your problem as well!
Under PHP 8.0, error_reporting() does not return 0 when then the code uses a @ character.
$a = $array [ 20 ]; // error_reporting() returns 0 in php =8
The example of E_ALL ^ E_NOTICE is a 'bit' confusing for those of us not wholly conversant with bitwise operators.
If you wish to remove notices from the current level, whatever that unknown level might be, use & ~ instead:
//.
$errorlevel = error_reporting ();
error_reporting ( $errorlevel & ~ E_NOTICE );
//. code that generates notices
error_reporting ( $errorlevel );
//.
?>
^ is the xor (bit flipping) operator and would actually turn notices *on* if they were previously off (in the error level on its left). It works in the example because E_ALL is guaranteed to have the bit for E_NOTICE set, so when ^ flips that bit, it is in fact turned off. & ~ (and not) will always turn off the bits specified by the right-hand parameter, whether or not they were on or off.
The error_reporting() function won't be effective if your display_errors directive in php.ini is set to "Off", regardless of level reporting you set. I had to set
display_errors = On
error_reporting = ~E_ALL
to keep no error reporting as default, but be able to change error reporting level in my scripts.
I'm using PHP 4.3.9 and Apache 2.0.
Some E_STRICT errors seem to be thrown during the page's compilation process. This means they cannot be disabled by dynamically altering the error level at run time within that page.
The work-around for this was to rename the file and replace the original with a error_reporting() call and then a require() call.
Ex, rename index.php to index.inc.php, then re-create index.php as:
error_reporting ( E_ALL & ~( E_STRICT | E_NOTICE ));
require( 'index.inc.php' );
?>
That allows you to alter the error reporting prior to the file being compiled.
I discovered this recently when I was given code from another development firm that triggered several E_STRICT errors and I wanted to disable E_STRICT on a per-page basis.
To expand upon the note by chris at ocproducts dot com. If you prepend @ to error_reporting(), the function will always return 0.
error_reporting ( E_ALL );
var_dump (
error_reporting (), // value of E_ALL,
@ error_reporting () // value is 0
);
?>
If you are using the PHP development server, run from the command line via `php -S servername:port`, every single error/notice/warning will be reported in the command line itself, with file name, and line number, and stack trace.
So if you want to keep a log of all the errors even after page reloads (for help in debugging, maybe), running the PHP development server can be useful.
This article refers to these two reporting levels:
// Report all PHP errors (see changelog)
error_reporting(E_ALL);
// Report all PHP errors
error_reporting(-1);
What is the difference between those two levels?
Please update this article with a clear explanation of the difference and the possible use cases.
To enable error reporting for *ALL* error messages including every error level (including E_STRICT, E_NOTICE etc.), simply use:
see more information about php 5.3 deprecated errors
this is to show all errors for code that may be run on different versions
for php 5 it shows E_ALL^E_STRICT and for other versions just E_ALL
if anyone sees any problems with it please correct this post
ini_set ( 'error_reporting' , version_compare ( PHP_VERSION , 5 , '>=' ) && version_compare ( PHP_VERSION , 6 , ' ?>
I always code with E_ALL set.
After a couple of pages of
$username = (isset( $_POST [ 'username' ]) && !empty( $_POST [ 'username' ])).
?>
I made this function to make things a little bit quicker. Unset values passed by reference won't trigger a notice.
function test_ref (& $var , $test_function = '' , $negate = false ) $stat = true ;
if(!isset( $var )) $stat = false ;
if (!empty( $test_function ) && function_exists ( $test_function )) $stat = $test_function ( $var );
$stat = ( $negate ) ? $stat ^ 1 : $stat ;
>
elseif( $test_function == 'empty' ) $stat = empty( $var );
$stat = ( $negate ) ? $stat ^ 1 : $stat ;
>
elseif (! function_exists ( $test_function )) $stat = false ;
trigger_error ( " $test_function () is not a valid function" );
>
$stat = ( $stat ) ? true : false ;
return $stat ;
>
$a = '' ;
$b = '15' ;
test_ref ( $a , 'empty' , true ); //False
test_ref ( $a , 'is_int' ); //False
test_ref ( $a , 'is_numeric' ); //False
test_ref ( $b , 'empty' , true ); //true
test_ref ( $b , 'is_int' ); //False
test_ref ( $b , 'is_numeric' ); //false
test_ref ( $unset , 'is_numeric' ); //false
test_ref ( $b , 'is_number' ); //returns false, with an error.
?>
If you want to see all errors in your local environment, you can set your project URL like "foo.com.local" locally and put that in bootstrap file.
if ( substr ( $_SERVER [ 'SERVER_NAME' ], - 6 ) == '.local' ) ini_set ( 'display_errors' , 1 );
ini_set ( 'error_reporting' , E_ALL );
// or error_reporting(E_ALL);
>
?>
error_reporting() has no effect if you have defined your own error handler with set_error_handler()
[Editor's Note: This is not quite accurate.
E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR and E_COMPILE_WARNING error levels will be handled as per the error_reporting settings.
All other levels of errors will be passed to the custom error handler defined by set_error_handler().
Zeev Suraski suggests that a simple way to use the defined levels of error reporting with your custom error handlers is to add the following line to the top of your error handling function:
В этом руководстве мы расскажем о различных способах того, как в PHP включить вывод ошибок. Мы также обсудим, как записывать ошибки в журнал (лог).
Как быстро показать все ошибки PHP
Самый быстрый способ отобразить все ошибки и предупреждения php - добавить эти строки в файл PHP:
Что именно делают эти строки?
Функция ini_set попытается переопределить конфигурацию, найденную в вашем ini-файле PHP.
Displayerrors и displaystartuperrors - это только две из доступных директив. Директива displayerrors определяет, будут ли ошибки отображаться для пользователя. Обычно директива dispay_errors не должна использоваться для "боевого" режима работы сайта, а должна использоваться только для разработки.
displaystartuperrors - это отдельная директива, потому что displayerrors не обрабатывает ошибки, которые будут встречаться во время запуска PHP. Список директив, которые могут быть переопределены функцией iniset, находится в официальной документации .
К сожалению, эти две директивы не смогут отображать синтаксические ошибки, такие как пропущенные точки с запятой или отсутствующие фигурные скобки.
Отображение ошибок PHP через настройки в php.ini
Если ошибки в браузере по-прежнему не отображаются, то добавьте директиву:
Директиву displayerrors следует добавить в ini-файл PHP. Она отобразит все ошибки, включая синтаксические ошибки, которые невозможно отобразить, просто вызвав функцию iniset в коде PHP.
Актуальный INI-файл можно найти в выводе функции phpinfo (). Он помечен как "загруженный файл конфигурации" ("loaded configuration file").
Отображать ошибки PHP через настройки в .htaccess
Включить или выключить отображение ошибок можно и с помощью файла .htaccess, расположенного в каталоге сайта.
.htaccess также имеет директивы для displaystartuperrors и display_errors.
Вы можете настроить displayerrors в .htaccess или в вашем файле PHP.ini. Однако многие хостинг-провайдеры не разрешают вам изменять ваш файл PHP.ini для включения displayerrors.
В файле .htaccess также можно включить настраиваемый журнал ошибок, если папка журнала или файл журнала доступны для записи. Файл журнала может быть относительным путем к месту расположения .htaccess или абсолютным путем, например /var/www/html/website/public/logs .
Включить подробные предупреждения и уведомления
Для отображения предупреждений и уведомлений укажите «EWARNING | ENOTICE».
Также можно указать EERROR, EWARNING, EPARSE и ENOTICE в качестве аргументов. Чтобы сообщить обо всех ошибках, кроме уведомлений, укажите «EALL & ~ ENOTICE», где EALL обозначает все возможные параметры функции errorreporting.
Более подробно о функции error_reporting ()
PHP позволяет использовать переменные, даже если они не объявлены. Это не стандартная практика, поскольку необъявленные переменные будут вызывать проблемы для приложения, если они используются в циклах и условиях.
Иногда это также происходит потому, что объявленная переменная имеет другое написание, чем переменная, используемая для условий или циклов. Когда ENOTICE передается в функцию errorreporting, эти необъявленные переменные будут отображаться.
Эти три строки кода делают одно и то же, они будут отображать все ошибки PHP. Errorreporting(EALL) наиболее широко используется разработчиками для отображения ошибок, потому что он более читабелен и понятен.
Включить ошибки php в файл с помощью функции error_log ()
Простой способ использовать файлы журналов - использовать функцию error_log, которая принимает четыре параметра. Единственный обязательный параметр - это первый параметр, который содержит подробную информацию об ошибке или о том, что нужно регистрировать. Тип, назначение и заголовок являются необязательными параметрами.
Параметр type, если он не определен, будет по умолчанию равен 0, что означает, что эта информация журнала будет добавлена к любому файлу журнала, определенному на веб-сервере.
Параметр 1 отправит журнал ошибок на почтовый ящик, указанный в третьем параметре. Чтобы эта функция работала, PHP ini должен иметь правильную конфигурацию SMTP, чтобы иметь возможность отправлять электронные письма. Эти SMTP-директивы ini включают хост, тип шифрования, имя пользователя, пароль и порт. Этот вид отчетов рекомендуется использовать для самых критичных ошибок.
Журнал ошибок PHP через конфигурацию веб-сервера
Лучший способ регистрировать ошибки - это определить их в файле конфигурации веб-сервера.
Однако в этом случае вам нужно попросить администратора сервера добавить следующие строки в конфигурацию.
Пример для Apache:
В nginx директива называется error_log.
Теперь вы знаете, как в PHP включить отображение ошибок. Надеемся, что эта информация была вам полезна.
Читайте также: