Php номер строки с ошибкой

(PHP 7, PHP 8)

Error::getLineПолучает номер строки, в которой произошла ошибка

Описание

final public Error::getLine(): int

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает номер строки, в которой произошла ошибка.

Примеры

Пример #1 Пример использованияError::getLine()


<?php
try {
throw new
Error("Какое-то сообщение об ошибке");
} catch(
Error $e) {
echo
"Ошибка создана в строке: " . $e->getLine();
}
?>

Результатом выполнения данного примера
будет что-то подобное:

Ошибка создана в строке: 3

There are no user contributed notes for this page.

  • #1

Получение номера строки кода ошибки.

Люди как получить номер строки кода в которой произошла ошибка. И можно ли их перехватывать и….. ну скажем складывать куда нить.
И еще как, если мона, отрубить вывод в сообщении об ошибке ИМЯ исполняемого файла, ну или хотябы сделать его относительным, а не обсолютным.

AnToXa

AnToXa

prodigy-одаренный ребенок


  • #4

Ну ка, Ну ка
Ща поглядим потом обязательно напишу что нашел а что нет :)

  • #5

Так.
Ну что сказать. Спасибо AnToXa. Да и только.
Ну теперь по делу.
Я скорее всего, до конца может и не понял всего, что там на писанно. Но спрашу как понял. А если что не так подправите.
Как я понял эта SET_ERROR_HANDLER хрень. Перенаправляет функцию вывода найденых сообщений об ошибках.
Ну типа вызывает функцию указанную в
SET_ERROR_HANDLER (Имя моей функции);
с забитыми в вызов уже моей функции аргументами ошибки в PHP скрипте. Вообщем такой сыр бор. Ну так сам вопрос. Я там не нашел ПОЛНОГО описание того, какой синтаксис вызова Моей функции. То есть какие ВСЕ аргументы, SET_ERROR_HANDLER передает вызываемой Моей функции.
Или то что в примере — это и есть полный список.
Конкретно:
$errno, $errstr, $errfile, $errline — Это всё или еще что есть ?
PS
Еще раз сенкс. Просто рулез.
Теперь МОЙ PHP с юморком и ругаться умеет на русском :)))

  • #6

И еще обьясните мне плиз тока, на пальцах.
Что такое конкретно E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE.
Я доку почитал. Но с инглишём ТУГО.
Как я понял по типу ошибки это обычное E_ERROR и т.д. только сообщения эти можно перебивать trigger_error.
То есть если я не буду использовать trigger_error, то мои сообщения E_USER_ERROR и E_ERROR будут одинаковыми.

А если я в начале скрипта поставлю error_reporting ( E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE );
И дальше буду тыкать везде trigger_error то в место обычных ошибок типа E_ERROR, E_WARNING, E_NOTICE бутут вылетать мои. Так что ли ась ?

  • #7

to All
На счет описание синтаксиса, вроде нашел :

$errno — номер типа ошибки
$errmsg — описание ошибки
$filename — фаил в котоом была обнаружена ошибка
$linenum — номер строки с ошибкой
+
$vars — а вот тут я так и не понял что ЭТА ЗА ХРЕНЬ ?

Может кто сталкивался, что это за аргумент, вроде это тип. Только чего? У меня почему то всегда пишет Array. :-?

RomikChef

Guest


  • #8

ты знаешь, я тут подумал…
не знаю, я не уверен, конечно, но есть такая гипотеза…
Нет, вряд ли. Но все-таки, напишу.
В общем, мне кажется, что если пишет array, то это, наверное, массив.

  • #9

to Ромик
Очень смешно ХА*2
На посмейся щас ГАД :)

$errno — 2
$errmsg — OpenDir: Invalid argument (errno 22)
$filename — d:wwwtestPHPr_12.php
$linenum — 118
$vars — Array

ты знаешь, я тут подумал…
не знаю, я не уверен, конечно, но есть такая гипотеза…
Нет, вряд ли. Но все-таки, напишу.
В общем, какой нахрен массив. :) гы гы

PS
При чем здесь массив.
Ну как. Давай Ромик блесни. Научи засранца уму разуму. :)

RomikChef

Guest


  • #10

Ну, значит — ошибся…
пора напенсию :-(((((

  • #11

Да не Ромик это я дятел ЛЕНИВЫЙ.
Ты был прав это массив. Вот только Чего? (Ну типа забыл сказать :) )
А вот чего ?
АССОЦИАТИВНО заполненый массив переменных с их значения, той области данных в которой произошла ошибка. Ну типа если ошибка внутри функции, то в массиве будут все переменные со своими значениями этой функции.
PS
Вы бы это видели. ГЫ гы. Если сделать ошибку в майне….. Вся поднаготная системы……
PHP CoooooooooooooL !!!!!!!

AnToXa

AnToXa

prodigy-одаренный ребенок


  • #12

Вы бы это видели. ГЫ гы. Если сделать ошибку в майне….. Вся поднаготная системы……

хм :)
наивный :)

[m]get_defined_vars[/m] :D :D :p

  • #13

ГЫ гы
Сенкс.
Прикольно, почти тоже самое, тока в моём случае кажися удобнее. Ну если ети данные выводить в логи. Ну хотя их можно и при ошибке отсылать. Ну ладно это не важно так просто больше гемора.
Сенкс. Век живи. Век доки читай :) гы гы гы

Is it possible to detect the line of code where the error is generated by php?
For example, when there is an Notice alert, it returns:

Notice: Undefined index: XX in / home / YY.php on line 17.

tshepang's user avatar

tshepang

12k21 gold badges91 silver badges135 bronze badges

asked Mar 1, 2014 at 14:42

Alessandro Bortolazzi's user avatar

3

You could register an error handler with set_error_handler:

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    $lines = file($errfile);
    $line = $lines[$errline - 1];
    print "Line with error: $line";
});

answered Mar 1, 2014 at 14:54

Razvan's user avatar

RazvanRazvan

2,42618 silver badges23 bronze badges

If you need place line into text of notice, you may use __LINE__ too or also

$Line = debug_backtrace()[0]['line'];

if you have PHP 5.4 — or (if you have older PHP)

$Line = debug_backtrace();
$Line = $Line[0]['line'];

or, if you need to have more debug info (usable also in PHP 5.4, of course)

$Debug = debug_backtrace();
$Line = $Debug[0]['line'];

You can use also higher number than 0 — but mostly it is useless. And also you should be sure that array given by debug_backtrace has more than one item (that array has also item with key 1 or greater).

answered Mar 1, 2014 at 15:18

Václav's user avatar

VáclavVáclav

5277 silver badges28 bronze badges

Exception::getLine

(PHP 5 >= 5.1.0, PHP 7)

Exception::getLineПолучает строку, в которой возникло исключение

Описание

final public int Exception::getLine
( void
)

Список параметров

У этой функции нет параметров.

Возвращаемые значения

Возвращает номер строки, где было создано исключение.

Примеры

Пример #1 Пример использования Exception::getLine()


<?php
try {
    throw new 
Exception("Какое-нибудь сообщение об ошибке");
} catch(
Exception $e) {
    echo 
"Исключение было создано на строке: " $e->getLine();
}
?>

Результатом выполнения данного примера
будет что-то подобное:

Исключение было создано на строке: 3

Вернуться к: Exception

Иногда ваше приложение не запускается должным образом, что приводит к ошибкам. Есть ряд причин, которые могут вызвать ошибки, например:

  • Веб-серверу может не хватить места на диске;
  • Пользователь мог ввести недопустимое значение в поле формы;
  • Файл или запись базы данных, к которой вы пытались получить доступ, возможно, не существует;
  • Приложение может не иметь разрешения на запись в файл на диске;
  • Служба, к которой приложение должно получить доступ, может быть временно недоступна.

Эти типы ошибок известны как ошибки времени выполнения, потому что они возникают во время выполнения скрипта. Они отличаются от синтаксических ошибок, которые необходимо исправлять перед запуском скриптов.

Профессиональное приложение должно иметь возможность изящно обрабатывать такие ошибки времени выполнения. Обычно это означает более четкое и точное информирование пользователя о проблеме.

Понимание уровней ошибок

Обычно, когда возникает проблема, препятствующая правильной работе скрипта, механизм PHP выдает ошибку. Каждая ошибка представлена целым числом и соответствующей константой. В следующей таблице перечислены некоторые из распространенных уровней ошибок:

Название Значение Описание
E_ERROR 1 Неустранимая ошибка времени выполнения от которой невозможно избавиться. Выполнение скрипта немедленно прекращается.
E_WARNING 2 Предупреждение во время выполнения. Она несущественна, и большинство ошибок попадают в эту категорию. Выполнение скрипта не останавливается.
E_NOTICE 8 Уведомление во время выполнения. Указывает, что скрипт обнаружил что-то, что могло быть ошибкой, хотя такая ситуация также может возникнуть при обычном запуске скрипта.
E_USER_ERROR 256 Сообщение о фатальной пользовательской ошибке. Она похожа на E_ERROR, за исключением того, что она генерируется PHP-скриптом с использованием функции trigger_error().
E_USER_WARNING 512 Предупреждающее сообщение, созданное пользователем без фатального исхода. Она похожа на E_WARNING, за исключением того, что она генерируется PHP-скриптом с использованием функции trigger_error().
E_USER_NOTICE 1024 Сообщение с уведомлением, созданное пользователем. Она похожа на E_NOTICE за исключением того, что она генерируется PHP-скриптом с использованием функции trigger_error().
E_STRICT 2048 Не совсем ошибка, но срабатывает всякий раз, когда PHP встречает код, который может привести к проблемам или несовместимости пересылки.
E_ALL 8191 Все ошибки и предупреждения, кроме E_STRICT до PHP 5.4.0.

Дополнительные сведения об уровнях ошибок см. в справочнике по уровням ошибок PHP.

Механизм PHP вызывает ошибку всякий раз, когда он сталкивается с проблемой в вашем скрипте, но вы также можете инициировать ошибки самостоятельно, чтобы генерировать более удобные сообщения об ошибках. Таким образом вы можете сделать свое приложение более сложным. В следующем разделе описаны некоторые из распространенных методов, используемых для обработки ошибок в PHP:

Базовая обработка ошибок с помощью функции die()

Рассмотрим следующий пример, в котором просто попытаемся открыть текстовый файл только для чтения.

<?php
// Пробуем открыть несуществующий файл
$file = fopen("sample.txt", "r"); // Выводит: Warning: fopen(sample.txt) [function.fopen]: failed to open stream: No such file or directory in C:wampwwwprojecttest.php on line 2
?>

Если мы выполним несколько простых шагов, мы сможем предотвратить получение пользователями такого сообщения об ошибке.

<?php
if(file_exists("sample.txt")){
    $file = fopen("sample.txt", "r");
} else{
    die("Error: The file you are trying to access doesn't exist.");
}
?>

Как вы можете видеть, реализовав простую проверку, существует ли файл перед попыткой доступа к нему, мы можем сгенерировать сообщение об ошибке, которое будет более понятным для пользователя.

Используемая выше функция die() просто отображает пользовательское сообщение об ошибке и завершает текущий скрипт, если файл sample.txt не найден.

Создание собственного обработчика ошибок

Вы можете создать свою собственную функцию обработчика ошибок, чтобы справляться с ошибкой времени выполнения, генерируемой механизмом PHP. Пользовательский обработчик ошибок обеспечивает большую гибкость и лучший контроль над ошибками; он может проверять ошибку и решать, что с ней делать — отображать сообщение пользователю, регистрировать ошибку в файле или базе данных или отправлять по электронной почте, попытаться исправить проблему и продолжить, выйти из выполнения скрипта или вообще игнорировать ошибку.

Функция пользовательского обработчика ошибок должна иметь возможность обрабатывать как минимум два параметра (errno и errstr), однако она может дополнительно принимать три дополнительных параметра (errfile, errline и errcontext), как описано ниже:

Параметр Описание
Обязательно — следующие параметры обязательны
errno. Задает уровень ошибки в виде целого числа. Это соответствует соответствующей константе уровня ошибки (E_ERROR, E_WARNING и т. д.).
errstr. Задает сообщение об ошибке в виде строки.
Опционально — следующие параметры являются необязательными
errfile. Задает имя файла скрипта, в котором произошла ошибка.
errline. Задает номер строки, в которой произошла ошибка.
errcontext. Задает массив, содержащий все переменные и их значения, которые существовали на момент возникновения ошибки. Полезно для отладки.

Вот пример простой пользовательской функции обработки ошибок. Этот обработчик customError() запускается всякий раз, когда возникает ошибка, какой бы тривиальной она ни была. Затем он выводит сведения об ошибке в браузер и останавливает выполнение скрипта.

<?php
// Функция обработчика ошибок
function customError($errno, $errstr){
    echo "<b>Error:</b> [$errno] $errstr";
}
?>

Вам нужно указать PHP, чтобы он использовал вашу пользовательскую функцию обработчика ошибок — просто вызовите встроенную функцию set_error_handler(), передав имя функции.

<?php
// Функция обработчика ошибок
function customError($errno, $errstr){
    echo "<b>Error:</b> [$errno] $errstr";
}
 
// Устанавливаем обработчик ошибок
set_error_handler("customError");
 
// Вызываем ошибку
echo($test);
?>

Регистрация ошибок

Журнал сообщений об ошибках в текстовом файле

Вы также можете записать подробную информацию об ошибке в файл журнала, например:

<?php
function calcDivision($dividend, $divisor){
    if($divisor == 0){
        trigger_error("calcDivision(): The divisor cannot be zero", E_USER_WARNING);
        return false;
    } else{
        return($dividend / $divisor);
    }
}
function customError($errno, $errstr, $errfile, $errline, $errcontext){
    $message = date("Y-m-d H:i:s - ");
    $message .= "Error: [" . $errno ."], " . "$errstr in $errfile on line $errline, ";
    $message .= "Variables:" . print_r($errcontext, true) . "rn";
    
    error_log($message, 3, "logs/app_errors.log");
    die("There was a problem, please try again.");
}
set_error_handler("customError");
echo calcDivision(10, 0);
echo "This will never be printed.";
?>

Отправка сообщений об ошибках по электронной почте

Вы также можете отправить электронное письмо с подробностями об ошибке, используя ту же функцию error_log().

<?php
function calcDivision($dividend, $divisor){
    if ($divisor == 0){
        trigger_error("calcDivision(): The divisor cannot be zero", E_USER_WARNING);
        return false;
    } else{
        return($dividend / $divisor);
    }
}
function customError($errno, $errstr, $errfile, $errline, $errcontext){
    $message = date("Y-m-d H:i:s - ");
    $message .= "Error: [" . $errno ."], " . "$errstr in $errfile on line $errline, ";
    $message .= "Variables:" . print_r($errcontext, true) . "rn";
    
    error_log($message, 1, "webmaster@example.com");
    die("There was a problem, please try again. Error report submitted to webmaster.");
}
set_error_handler("customError");
echo calcDivision(10, 0);
echo "This will never be printed.";
?>

Вызов ошибок

Хотя движок PHP выдает ошибку всякий раз, когда он сталкивается с проблемой в вашем скрипте, вы также можете вызвать ошибки самостоятельно. Это может помочь сделать ваше приложение более надежным, поскольку оно может выявлять потенциальные проблемы до того, как они перерастут в серьезные ошибки.

Чтобы вызвать ошибку в скрипте, вызовите функцию trigger_error(), передав сообщение об ошибке, которое вы хотите сгенерировать:

trigger_error("There was a problem.");

Рассмотрим следующую функцию, которая вычисляет деление двух чисел.

<?php
function calcDivision($dividend, $divisor){
    return($dividend / $divisor);
}
 
// Вызываем функцию
echo calcDivision(10, 0); // Выводит: Warning: Division by zero in C:wampwwwprojecttest.php on line 3
?>

Это сообщение выглядит не очень информативным. Рассмотрим следующий пример, в котором для генерации ошибки используется функция trigger_error().

<?php
function calcDivision($dividend, $divisor){
    if($divisor == 0){
        trigger_error("Делитель не может быть нулевым", E_USER_WARNING);
        return false;
    } else{
        return($dividend / $divisor);
    }
}
 
// Вызываем функцию
echo calcDivision(10, 0); // Выводит: Warning: Делитель не может быть нулевым C:wampwwwprojecterror.php on line 4
?>

Как видите, сообщение об ошибке, созданное во втором примере, более четко объясняет проблему по сравнению с предыдущим.

Понравилась статья? Поделить с друзьями:
  • Php не могу отловить ошибку
  • Php не выводить sql ошибки
  • Php не выводит ошибки в консоль
  • Php на какой строке ошибка
  • Php логирование ошибок в файл htaccess