Глава 35: контроль ошибок

This commit is contained in:
Igor Simdyanov
2022-05-25 21:00:08 +03:00
parent 2168ef90be
commit 0625de060e
7 changed files with 79 additions and 0 deletions

5
errors/log.php Normal file
View File

@ -0,0 +1,5 @@
<?php
error_reporting(E_ALL);
ini_set('error_log', 'log.txt');
ini_set('log_errors', true);
@filemtime('spoon');

0
errors/log.txt Normal file
View File

3
errors/php.ini Normal file
View File

@ -0,0 +1,3 @@
...
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
...

View File

@ -0,0 +1,17 @@
<?php
// Определяем новую функцию-обработчик
function myErrorHandler($errno, $msg, $file, $line)
{
echo '<div style="border-style:inset; border-width:2">';
echo "Произошла ошибка с кодом <b>$errno</b>!<br />";
echo "Файл: <tt>$file</tt>, строка $line.<br />";
echo "Текст ошибки: <i>$msg</i>";
echo '</div>';
}
// Регистрируем ее для всех типов ошибок
set_error_handler('myErrorHandler', E_ALL);
// Вызываем функцию для несуществующего файла, чтобы
// сгенерировать предупреждение, которое будет перехвачено
filemtime('spoon');

23
errors/suppression.php Normal file
View File

@ -0,0 +1,23 @@
<?php
// Определяем новую функцию-обработчик
function myErrorHandler($errno, $msg, $file, $line)
{
// Если используется @, ничего не делать
$code = E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR |
E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE;
if (error_reporting() == $code) return;
// Иначе выводим сообщение
echo '<div style="border-style:inset; border-width:2">';
echo "Произошла ошибка с кодом <b>$errno</b>!<br />";
echo "Файл: <tt>$file</tt>, строка $line.<br />";
echo "Текст ошибки: <i>$msg</i>";
echo "</div>";
}
// Регистрируем ее для всех типов ошибок
set_error_handler('myErrorHandler', E_ALL);
// Вызываем функцию для несуществующего файла, чтобы
// сгенерировать предупреждение, которое будет перехвачено
@filemtime('spoon');

17
errors/trace.php Normal file
View File

@ -0,0 +1,17 @@
<?php
function inner($a)
{
// Внутренняя функция
echo '<pre>';
print_r(debug_backtrace());
echo '</pre>';
}
function outer($x)
{
// Родительская функция
inner($x * $x);
}
// Главная программа
outer(3);

14
errors/trigger_error.php Normal file
View File

@ -0,0 +1,14 @@
<?php
function print_age(int $age)
{
$prefix = 'Функция print_age(): ';
$error = 'возраст не может быть отрицательным';
if ($age < 0) {
trigger_error($prefix . $error, E_USER_ERROR);
}
echo "Возраст составляет: $age";
}
// Вызов функции с отрицательным аргументом
print_age(-10);