0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Error в PHP: разновидности</a><ul><li><a>Фатальные</a></li>
1
<ul><li><a>Error в PHP: разновидности</a><ul><li><a>Фатальные</a></li>
2
<li><a>Не фатальные</a></li>
2
<li><a>Не фатальные</a></li>
3
<li><a>Пользовательские</a></li>
3
<li><a>Пользовательские</a></li>
4
</ul></li>
4
</ul></li>
5
<li><a>Error reporting</a></li>
5
<li><a>Error reporting</a></li>
6
</ul><p>Всем известная истина звучит, что не ошибается только тот, кто ничего не делает. В этой статье мы рассмотрим, какие ошибки бывают, а также кратко рассмотрим функцию error reporting, используемую для контроля отображения errors. Но для начала (in first) изучим каждый вид дефектов отдельно, обратив внимание на наиболее распространенные.</p>
6
</ul><p>Всем известная истина звучит, что не ошибается только тот, кто ничего не делает. В этой статье мы рассмотрим, какие ошибки бывают, а также кратко рассмотрим функцию error reporting, используемую для контроля отображения errors. Но для начала (in first) изучим каждый вид дефектов отдельно, обратив внимание на наиболее распространенные.</p>
7
<h2>Error в PHP: разновидности</h2>
7
<h2>Error в PHP: разновидности</h2>
8
<p>Ошибки в PHP бывают:</p>
8
<p>Ошибки в PHP бывают:</p>
9
<p>- фатальные (fatal);</p>
9
<p>- фатальные (fatal);</p>
10
<p>- не фатальные;</p>
10
<p>- не фатальные;</p>
11
<p>- пользовательские. </p>
11
<p>- пользовательские. </p>
12
<h3>Фатальные</h3>
12
<h3>Фатальные</h3>
13
<p>Fatal error в PHP - одна из наиболее серьезных проблем. Такие дефекты появляются и при компиляции, и во время работы парсера либо PHP-скрипта. Основной нюанс заключается в том, что<strong>происходит прерывание исполнения скрипта</strong>.</p>
13
<p>Fatal error в PHP - одна из наиболее серьезных проблем. Такие дефекты появляются и при компиляции, и во время работы парсера либо PHP-скрипта. Основной нюанс заключается в том, что<strong>происходит прерывание исполнения скрипта</strong>.</p>
14
<p>Ниже рассмотрим основные разновидности фатальных ошибок:</p>
14
<p>Ниже рассмотрим основные разновидности фатальных ошибок:</p>
15
<ol><li><strong>E_PARSE.</strong>Грубый недостаток в синтаксисе. PHP-интерпретатор не понимает, что вы вообще от него хотите. Пример - разработчик забыл закрыть (поставил лишнюю) фигурную либо круглую скобку либо написал код на непонятном интерпретатору языке. Здесь важно понимать следующее: код файла с parse error выполнен не будет, поэтому, если вы захотите включить отображение ошибок в этом же файле, где появилась parse error, такое не сработает.</li>
15
<ol><li><strong>E_PARSE.</strong>Грубый недостаток в синтаксисе. PHP-интерпретатор не понимает, что вы вообще от него хотите. Пример - разработчик забыл закрыть (поставил лишнюю) фигурную либо круглую скобку либо написал код на непонятном интерпретатору языке. Здесь важно понимать следующее: код файла с parse error выполнен не будет, поэтому, если вы захотите включить отображение ошибок в этом же файле, где появилась parse error, такое не сработает.</li>
16
<li><strong>E_ERROR.</strong>Интерпретатор PHP понимает, что хочет разработчик, но выполнить это не может по разным причинам. Выполнение скрипта будет прервано, однако произойдет именно в месте возникновения проблемы, то есть код сработает до того места, где находится ошибка. Примеры:</li>
16
<li><strong>E_ERROR.</strong>Интерпретатор PHP понимает, что хочет разработчик, но выполнить это не может по разным причинам. Выполнение скрипта будет прервано, однако произойдет именно в месте возникновения проблемы, то есть код сработает до того места, где находится ошибка. Примеры:</li>
17
</ol><p>- не удалось обнаружить подключаемый файл PHP;</p>
17
</ol><p>- не удалось обнаружить подключаемый файл PHP;</p>
18
<p>- было выброшено, но не было обработано исключение;</p>
18
<p>- было выброшено, но не было обработано исключение;</p>
19
<p>- разработчик пытался вызвать метод класса, причем данный метод не существует;</p>
19
<p>- разработчик пытался вызвать метод класса, причем данный метод не существует;</p>
20
<p>- отсутствует свободная память (превышен лимит директивы<em>memory_limit</em>).</p>
20
<p>- отсутствует свободная память (превышен лимит директивы<em>memory_limit</em>).</p>
21
<p>Нередко проблема возникает во время чтения либо загрузки больших файлов, поэтому надо быть особенно внимательным в вопросах потребляемой памяти.</p>
21
<p>Нередко проблема возникает во время чтения либо загрузки больших файлов, поэтому надо быть особенно внимательным в вопросах потребляемой памяти.</p>
22
<h3>Не фатальные</h3>
22
<h3>Не фатальные</h3>
23
<p>В данном случае выполнение скрипта не прерывается, однако именно эти дефекты часто находят тестировщики программного обеспечения. И именно эти недоработки доставляют наибольшие хлопоты начинающим программистам на PHP.</p>
23
<p>В данном случае выполнение скрипта не прерывается, однако именно эти дефекты часто находят тестировщики программного обеспечения. И именно эти недоработки доставляют наибольшие хлопоты начинающим программистам на PHP.</p>
24
<p>Разновидности:</p>
24
<p>Разновидности:</p>
25
<ul><li><strong>E_WARNING.</strong>Нередко встречаются, если разработчик подключает файл с использованием include, а данного файла или нет на сервере, или была допущена ошибка при указании пути. Другая причина E_WARNING - использование неправильного типа аргументов при вызове функций. Но вообще причин много - все не перечислишь;</li>
25
<ul><li><strong>E_WARNING.</strong>Нередко встречаются, если разработчик подключает файл с использованием include, а данного файла или нет на сервере, или была допущена ошибка при указании пути. Другая причина E_WARNING - использование неправильного типа аргументов при вызове функций. Но вообще причин много - все не перечислишь;</li>
26
<li><strong>E_NOTICE.</strong>Распространены наиболее широко. Вдобавок к этому, существуют любители, которые отключают вывод ошибок, в результате чего клепают E_NOTICE просто пачками. Эти errors сами по себе тривиальны:</li>
26
<li><strong>E_NOTICE.</strong>Распространены наиболее широко. Вдобавок к этому, существуют любители, которые отключают вывод ошибок, в результате чего клепают E_NOTICE просто пачками. Эти errors сами по себе тривиальны:</li>
27
</ul><p>- обращение к неопределенной переменной;</p>
27
</ul><p>- обращение к неопределенной переменной;</p>
28
<p>- обращение к элементу массива, когда элемент не существует;</p>
28
<p>- обращение к элементу массива, когда элемент не существует;</p>
29
<p>- обращение к несуществующей константе;</p>
29
<p>- обращение к несуществующей константе;</p>
30
<p>- проблема, возникающая, если не конвертируются типы данных и т. п.</p>
30
<p>- проблема, возникающая, если не конвертируются типы данных и т. п.</p>
31
<p>Чтобы избежать таких недоработок, надо быть внимательным, особенно к тому, что подсказывает IDE - игнорировать подсказки точно не стоит;</p>
31
<p>Чтобы избежать таких недоработок, надо быть внимательным, особенно к тому, что подсказывает IDE - игнорировать подсказки точно не стоит;</p>
32
<ul><li><strong>E_DEPRECATED.</strong>Язык программирования PHP станет ругаться при использовании устаревших функций (т. е. функций, которые помечены в качестве deprecated);</li>
32
<ul><li><strong>E_DEPRECATED.</strong>Язык программирования PHP станет ругаться при использовании устаревших функций (т. е. функций, которые помечены в качестве deprecated);</li>
33
<li><strong>E_STRICT.</strong>Это тоже история про то, что нужно писать код правильно и обращать внимание на подсказки со стороны IDE, дабы потом не было мучительно больно и стыдно. К примеру, если вы вызовете нестатический метод как статику, код, отображенный ниже, функционировать будет, но ведь это как-то неправильно. Почему? Потому что в дальнейшем возможно появление существенных ошибок, если метод класса изменится, и появится обращение к $this:</li>
33
<li><strong>E_STRICT.</strong>Это тоже история про то, что нужно писать код правильно и обращать внимание на подсказки со стороны IDE, дабы потом не было мучительно больно и стыдно. К примеру, если вы вызовете нестатический метод как статику, код, отображенный ниже, функционировать будет, но ведь это как-то неправильно. Почему? Потому что в дальнейшем возможно появление существенных ошибок, если метод класса изменится, и появится обращение к $this:</li>
34
</ul><p><em>class Strict {</em></p>
34
</ul><p><em>class Strict {</em></p>
35
<p><em> </em><em>public function test() {</em></p>
35
<p><em> </em><em>public function test() {</em></p>
36
<p><em> echo "It’s test for me. It is not fatal error";</em></p>
36
<p><em> echo "It’s test for me. It is not fatal error";</em></p>
37
<p><em> }</em></p>
37
<p><em> }</em></p>
38
<p><em>}</em></p>
38
<p><em>}</em></p>
39
<p><em>Strict::test(); </em><em></em></p>
39
<p><em>Strict::test(); </em><em></em></p>
40
<p>Но вообще тип E_STRICT больше актуален для PHP 5.6, поэтому он практически выпилен из 7-й версии языка.</p>
40
<p>Но вообще тип E_STRICT больше актуален для PHP 5.6, поэтому он практически выпилен из 7-й версии языка.</p>
41
<h3>Пользовательские</h3>
41
<h3>Пользовательские</h3>
42
<p>Этот "балаган" разводится самим разработчиком. Злоупотреблять такими errors не рекомендуется:</p>
42
<p>Этот "балаган" разводится самим разработчиком. Злоупотреблять такими errors не рекомендуется:</p>
43
<ul><li>E_USER_WARNING - некритическая ошибка;</li>
43
<ul><li>E_USER_WARNING - некритическая ошибка;</li>
44
<li>E_USER_ERROR - критическая;</li>
44
<li>E_USER_ERROR - критическая;</li>
45
<li>E_USER_NOTICE - речь идет о сообщениях, которые ошибками не являются.</li>
45
<li>E_USER_NOTICE - речь идет о сообщениях, которые ошибками не являются.</li>
46
</ul><p>Отдельно надо сказать про E_USER_DEPRECATED - напоминает о том, что метод либо функция устарели, то есть пришло время переписать код. Чтобы создать эту и подобные ошибки, применяется функция trigger_error:</p>
46
</ul><p>Отдельно надо сказать про E_USER_DEPRECATED - напоминает о том, что метод либо функция устарели, то есть пришло время переписать код. Чтобы создать эту и подобные ошибки, применяется функция trigger_error:</p>
47
<p>Раз основные разновидности проблем уже были рассмотрены, пришло время дать пояснение относительно работы директивы <em>display_errors</em>:</p>
47
<p>Раз основные разновидности проблем уже были рассмотрены, пришло время дать пояснение относительно работы директивы <em>display_errors</em>:</p>
48
<ul><li>когда если display_errors = on, в случае ошибки веб-браузер получит html c кодом 200 и текстом ошибки;</li>
48
<ul><li>когда если display_errors = on, в случае ошибки веб-браузер получит html c кодом 200 и текстом ошибки;</li>
49
<li>когда display_errors = off, для фатальных ошибок код реквеста будет 500, причем результат не вернется пользователю. Для остальных ошибок программный код будет работать неверно, однако он "никому про это не расскажет".</li>
49
<li>когда display_errors = off, для фатальных ошибок код реквеста будет 500, причем результат не вернется пользователю. Для остальных ошибок программный код будет работать неверно, однако он "никому про это не расскажет".</li>
50
</ul><h2>Error reporting</h2>
50
</ul><h2>Error reporting</h2>
51
<p>Для того чтобы ошибки в PHP не остались незамеченными, их нужно отслеживать с помощью отчетов (reports). Такой report можно получить посредством функции error_reporting(), а включить отображение ошибок можно, используя директиву display_errors:</p>
51
<p>Для того чтобы ошибки в PHP не остались незамеченными, их нужно отслеживать с помощью отчетов (reports). Такой report можно получить посредством функции error_reporting(), а включить отображение ошибок можно, используя директиву display_errors:</p>
52
<p><em><?php</em></p>
52
<p><em><?php</em></p>
53
<p><em>error_reporting(E_ALL);</em></p>
53
<p><em>error_reporting(E_ALL);</em></p>
54
<p><em>ini_set(‘display_errors’, 1);</em></p>
54
<p><em>ini_set(‘display_errors’, 1);</em></p>
55
<p>Функция error reporting является встроенной. Она позволяет контролировать, какие именно errors станут отображаться и сообщаться (reported) разработчику. Не стоит забывать и о том, что в PHP ini существует директива error_reporting, причем во время выполнения функция<em>error_reporting()</em>задает значение этой директивы.</p>
55
<p>Функция error reporting является встроенной. Она позволяет контролировать, какие именно errors станут отображаться и сообщаться (reported) разработчику. Не стоит забывать и о том, что в PHP ini существует директива error_reporting, причем во время выполнения функция<em>error_reporting()</em>задает значение этой директивы.</p>
56
<a></a><p><em>Полезные ссылки на тематические материалы:</em></p>
56
<a></a><p><em>Полезные ссылки на тематические материалы:</em></p>
57
<ul><li><em>https://www.php.net/manual/ru/function.error-reporting.php;</em></li>
57
<ul><li><em>https://www.php.net/manual/ru/function.error-reporting.php;</em></li>
58
<li><em>https://www.netangels.pro/article/php-errors/;</em></li>
58
<li><em>https://www.netangels.pro/article/php-errors/;</em></li>
59
<li><em>https://habr.com/ru/post/440744/</em>;</li>
59
<li><em>https://habr.com/ru/post/440744/</em>;</li>
60
<li>https://www.karashchuk.com/PHP/error_reporting-display_errors-display_startup_errors/.</li>
60
<li>https://www.karashchuk.com/PHP/error_reporting-display_errors-display_startup_errors/.</li>
61
</ul>
61
</ul>