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 :: try/catch и запись ошибок в файл

 PHP.SU

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


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

> Описание: дублируются строки с ошибками
newbie guy
Отправлено: 01 Апреля, 2016 - 01:14:08
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2015  


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




Доброго времени суток!

И так. Есть файлик index.php

PHP:
скопировать код в буфер обмена
  1. //отображение всех ошибок
  2.  
  3. if(!is_writable(realpath(dirname(__FILE__) . DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR)){
  4.     die('Closed or limited access to root directory');
  5. }
  6.  
  7. // подключаем конфигурационный файл
  8. include ('config.php');
  9.  
  10. // подключаем автозагрузчик
  11. include (SITE_PATH . DS . 'autoloader' . DS . 'autoloader.php');
  12.  
  13. // соединение с БД
  14. try {
  15.     $db = new PDO(DB_TYPE.':host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS);
  16.     $db->exec('SET CHARACTER SET utf8');
  17. }
  18. catch(PDOException $e) {
  19.  
  20.     new Error_Gen(SITE_PATH, $e->getMessage());
  21.  
  22. }


И собственно файл с классом Error_Gen (error_gen.php)

PHP:
скопировать код в буфер обмена
  1. class Error_Gen {
  2.  
  3.     function __construct($path, $message) {
  4.  
  5.         $this->random = $this->randomStr(8);
  6.  
  7.         // строка, которую будем записывать в файл
  8.         $text = 'DATE: '.date('m.d.y H:i:s').'     ';
  9.         $text .= 'ERROR MESSAGE: '.$message.'     ';
  10.         $text .= 'ERROR CODE: '. $this->random.PHP_EOL;
  11.  
  12.         $fp = fopen($path."/error/ERROR_CODE.txt", "a");
  13.         fwrite($fp, $text);
  14.         fclose($fp);
  15.  
  16.         die('Something went wrong. More detailed information in the file ERROR_CODE.txt<br />ERROR CODE: '.$this->random);
  17.     }
  18.  
  19.  
  20.     function randomStr($length) {
  21.  
  22.         $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  23.         $randomStr = '';
  24.  
  25.         for ($i = 0; $i <= $length; $i++) {
  26.             $randomStr .= $characters[mt_rand (0, strlen ($characters) - 1)];
  27.         }
  28.  
  29.         return $randomStr;
  30.     }
  31. }


Пример:

Когда возникает ошибка с подключение к БД, на страницу выкидывается сообщение

"Something went wrong. More detailed information in the file ERROR_CODE.txt
ERROR CODE: m9pj5KDsm"


а в файл записываются 2-3 строки

DATE: 04.01.16 00:53:15 ERROR MESSAGE: could not find driver ERROR CODE: m9pj5KDsm
DATE: 04.01.16 00:53:15 ERROR MESSAGE: could not find driver ERROR CODE: dwD4PKw1W
DATE: 04.01.16 00:53:15 ERROR MESSAGE: could not find driver ERROR CODE: 8IZhEi9wZ


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

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

Как это сделать, дайте пожалуйста совет, а то ума не хватает.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB