Як зробити реєстрацію помилок у CodeIgniter (PHP)


92

Я хочу реєструвати помилки в PHP CodeIgniter. Як увімкнути журналювання помилок?

У мене є кілька запитань:

  1. Які всі кроки для реєстрації помилки?
  2. Як створюється файл журналу помилок?
  3. Як вставити повідомлення про помилку у файл журналу (щоразу, коли виникає помилка)?
  4. Як надіслати цю помилку електронною поштою на електронну адресу?

Відповіді:


180

CodeIgniter має вбудовані деякі функції реєстрації помилок.

  • Створіть свої / application / logs папку доступною для запису
  • У /application/config/config.php встановіть
    $config['log_threshold'] = 1;
    або використовуйте більше число, залежно від того, скільки деталей ви хочете у своїх журналах
  • Використовуйте log_message('error', 'Some variable did not contain a value.');
  • Щоб надіслати електронне повідомлення, потрібно розширити основний метод класу CI_Exceptions log_exceptions(). Ви можете зробити це самостійно або використовувати це . Більше інформації про розширення ядра тут

Див. Http://www.codeigniter.com/user_guide/general/errors.html



Чи є для цього наслідки для безпеки?
Aakil Fernandes

Це скидає дані у php-файл, ім'я якого має формат: log- [Ymd H: i: s] або будь-яке значення, встановлене у конфігурації ключа log_date_format, визначеному у вашому файлі конфігурації. Поки ви не зможете реєструвати / скидати конфіденційні дані, це повинно бути досить безпечно. Цей файл за замовчуванням відносно сторінки index.html, тому, очевидно, створені php-файли не будуть загальнодоступними - але ви ніколи не дізнаєтесь. Переконайтесь, що всі ці запобіжні заходи застосовані, якщо ви змінюєте стандартний каталог програм / журналів.
Вінсент Едвард Гедарія Бінуа

7
Зробіть вашу папку / application / logs
доступною для

Коли я встановив "$ config ['log_threshold'] = 1;", я не отримав жодних журналів у папці / application / logs. Однак, коли я встановив "$ config ['log_threshold'] = 3", з'явився файл журналу. Сподіваюся, це допомагає. Дякую! Мир.
masarapmabuhay

25

Щоб просто помістити рядок у журнал помилок сервера, використовуйте функцію error_log () PHP. Однак цей метод не надсилатиме електронне повідомлення.

По-перше, щоб викликати помилку:

trigger_error("Error message here", E_USER_ERROR);

За замовчуванням це відображатиметься у файлі журналу помилок сервера. Див. Директиву ErrorLog для Apache. Щоб встановити власний файл журналу:

ini_set('error_log', 'path/to/log/file');

Зверніть увагу, що вибраний вами файл журналу повинен уже існувати та бути доступним для запису сервером. Найпростіший спосіб зробити файл доступним для запису - зробити користувача сервера власником файлу. (Користувачем сервера може бути ніхто, _www, apache або щось інше, залежно від розповсюдження вашої ОС.)

Щоб надіслати помилку електронною поштою, потрібно налаштувати власний обробник помилок:

function mail_error($errno, $errstr, $errfile, $errline) {
  $message = "[Error $errno] $errstr - Error on line $errline in file $errfile";
  error_log($message); // writes the error to the log file
  mail('you@yourdomain.com', 'I have an error', $message);
}
set_error_handler('mail_error', E_ALL^E_NOTICE);

Для отримання додаткової інформації дивіться відповідну документацію PHP .


3

Також переконайтеся, що ви дозволили codeigniter реєструвати тип повідомлень, які ви хочете, у файлі конфігурації.

тобто $config['log_threshold'] = [log_level ranges 0-4];


1

Детальніше щодо запитання, частина 4 Як надіслати цю помилку електронною поштою на електронну адресу? Функція error_log також має адресу електронної пошти. http://php.net/manual/en/function.error-log.php

Ага, тут я знайшов приклад, який показує використання. Надіслати повідомлення про помилку електронною поштою за допомогою error_log ()

error_log($this->_errorMsg, 1, ADMIN_MAIL, "Content-Type: text/html; charset=utf8\r\nFrom: ".MAIL_ERR_FROM."\r\nTo: ".ADMIN_MAIL);

0
In config.php add or edit the following lines to this:
------------------------------------------------------
$config['log_threshold'] = 4; // (1/2/3)
$config['log_path'] = '/home/path/to/application/logs/';

Run this command in the terminal:
----------------------------------
sudo chmod -R 777 /home/path/to/application/logs/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.