Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: вывод своей ошибки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
LEONeso
Отправлено: 02 Марта, 2011 - 11:05:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




Здравствуйте, как вывести свою ошибку в php при ошибке выполнения кода/функции?
Раньше часто встречал, теперь нужен стал и не найти.
(Добавление)
Все нашел в своем же коде:

(Отредактировано автором: 02 Марта, 2011 - 11:06:31)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
garvey
Отправлено: 02 Марта, 2011 - 11:13:38
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




die() - плохая прктика. Используйте Exception. Это очень удобно для логирования, просмотра трассировки ошибок. продолжение выполнения скрипта при ошибке.
 
 Top
ALEN
Отправлено: 02 Марта, 2011 - 13:02:56
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




LEONeso
вшу и exit - конструкция языка, которая просто выводит сообщение и моментально прекращает выполнение кода, но это не вывод ошибки
 
 Top
OrmaJever Модератор
Отправлено: 02 Марта, 2011 - 13:33:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)






-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LEONeso
Отправлено: 02 Марта, 2011 - 14:10:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




garvey, каким образом php может вести сам логи выводимых ошибок на странице? Ведь при использовании скрипта в массовом режиме, могут вылазить разного рода ошибки и их надо исправлять, чтоб отловить эти ошибки их надо записывать в лог файл. На форуме уже есть готовая функция ведения логов, её надо прописывать в каждом месте, где возможно будет выводиться ошибка т.е. допустим использовать, предлагаемый вами, Exception, возможно позволит вести беспрерывный лог всего скрипта или ресурса.

Возможно, есть готовые решения для ведения отладочных логов, вылавливая все ошибки, которые появляются на странице(ах) с указанием самой ошибки и информацию о браузере клиента включая его ip?

Вероятно выгоднее вести лог в базе данных нежели в файле?

(Отредактировано автором: 02 Марта, 2011 - 14:14:35)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
garvey
Отправлено: 02 Марта, 2011 - 14:26:13
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




Я делаю так. Есть класс, системные ошибки которого нужно логировать. В нем определяю метод логирования. В общем, вот код.
PHP:
скопировать код в буфер обмена
  1. class TestClass
  2. {
  3.     private function _customErrorHandler($errno, $errstr, $errfile, $errline, $errcontext)
  4.     {
  5.         throw new Exception($errno, $errstr, $errfile, $errline, $errcontext);
  6.         // Или логирование
  7.     }
  8.  
  9.     public function __construct()
  10.     {
  11.         set_error_handler(array($this, '_customErrorHandler'), E_ALL & ~E_NOTICE);
  12.     }
  13.  
  14.     public function test()
  15.     {
  16.         $a = 2 / 0; // Division by zero
  17.     }
  18. }
 
 Top
LEONeso
Отправлено: 02 Марта, 2011 - 14:53:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




garvey, не совсем ясна работа класса, можете привести некоторые примеры его использования?

так? какие данные ему нужны для обработки?
PHP:
скопировать код в буфер обмена
  1. $object = new TestClass;
  2. $object-> _customErrorHandler();


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
JustUserR
Отправлено: 02 Марта, 2011 - 15:36:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




LEONeso пишет:
or die();
Использование предполагаемой конструкции для осуществления определения локального потока отображения произошедней ошибки, основано на примении логического оператора короткого замыкания, функционирование которого обеспечивает проведением расчета ассоциированного возвращаемого значения для всех элементов интерпретируемого выражения; на основе применение операторов короткого замыкания возможно построение как потоков обработки ошибок, так и транзационных объектных действий, связанных с обеспечением успешного последовательского выполнения действий в виде act1 and act2 and act3 and commit or rollback


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
OrmaJever Модератор
Отправлено: 02 Марта, 2011 - 15:42:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




класс Exception недоработаный штоле Растерялся
Вот функция обработки warning и notice
PHP:
скопировать код в буфер обмена
  1. function myErrorHandler ($errno, $errstr, $errfile, $errline) {
  2. $f = fopen('error.log', 'a+');
  3. fputs($f, "Error: [$errno] $errstr in line $errline of file $errfile\r\n");
  4. fclose($f);
  5.  
  6. exit('Извините произошла ошибка.');
  7. }
  8. set_error_handler("myErrorHandler");
  9. // как пример не верный аргумент функции


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
garvey
Отправлено: 02 Марта, 2011 - 17:58:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




LEONeso.
У нас есть метод test, в котором есть ошибка "Division by zero". Вместо вывода ошибки, определенной интерпретатором, вызовется метод _customErrorHandler().
 
 Top
LEONeso
Отправлено: 02 Марта, 2011 - 18:33:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




garvey, т.е. сама по себе ошибка на экран не выводится?
только не понятно, нужно вызвать функцию в нужном месте, далее внести ошибку в переменную и передать её значение в функцию на обработку?

Плохо представляю как оно работает и как прописывается.

как писал OrmaJever,
mysql_fetch_row -- Орабатывает ряд результата запроса и возвращает неассоциативный массив.

т.е. строка вернет FALSE


и требуется ли применять представленный код OrmaJever'ом? или это уже полностью функциональная функция ,которая подойдет для моих целей?


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
garvey
Отправлено: 02 Марта, 2011 - 18:56:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




Да, не выводится, если код, в котором может возникнуть ошибка, обернуть в try-catch блок. Порой есть очень важный функционал, который не должен остановить работы после какой-нибудь ошибки программиста. Мой же вариант запишет это все в лог или еще что-нибудь сделает.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB