Как я могу отправить все ошибки php, запущенные на одной странице, по электронной почте? - PullRequest
4 голосов
/ 09 ноября 2009

Обычно у меня на сайте есть одна страница, на которой я хочу, чтобы любые php ошибки, предупреждения и т. Д. Отправлялись мне по электронной почте при каждом запуске скрипта.

Редактировать: это должен быть код, который размещен на странице, а не редактирование php_ini или что-то в этом роде.

Редактировать 2: необходимо перехватить ВСЕ ошибки и отправить ВСЕ ошибки в одном письме в конце скрипта

Ответы [ 4 ]

7 голосов
/ 09 ноября 2009

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

<?php

$__errors = array();
function my_error_handler($code, $message, $file, $line) {
    global $__errors;
    $__errors[] = sprintf('"%s" (%s line %s)', $message, $file, $line);
}
set_error_handler( 'my_error_handler', E_ALL );

function send_error_log() {
    global $__errors;

    if ( count( $__errors ) > 0 ) {
        foreach ( $__errors as $error ) {
            $body . $error . "\n";
        }
        mail( 'to@example.com', 'error log', $body );
    }
}
register_shutdown_function( 'send_error_log' );

?>
2 голосов
/ 09 ноября 2009

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

Если у вас нет доступа к журналам ошибок, лучше всего написать обработчик ошибок и использовать set_error_hander(). Я бы все же предложил, чтобы обработчик ошибок записывал в файл журнала, а не писал вам по электронной почте. Если ваш сайт получает трафик вообще, ваш почтовый ящик будет переполнен в кратчайшие сроки.

1 голос
/ 09 ноября 2009

Лучшее, что вы можете сделать - это написать обработчик ошибок и установить его с помощью set_error_handler. Однако это не будет обрабатывать все возможные ошибки.

1 голос
/ 09 ноября 2009

Вы можете создать пользовательскую функцию для set_error_handler()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...