Как я могу отправить все ошибки php, выполняемые на одной странице, по электронной почте?
Вопрос
По сути, у меня есть единственная страница на моем сайте, на которой я хочу, чтобы любые ошибки php, предупреждения и т.д. отправлялись мне по электронной почте при каждом запуске скрипта.
Редактировать:это должен быть код, размещенный на странице, а не правка в php_ini или что-то подобное.
Правка 2:для этого необходимо перехватить ВСЕ ошибки и отправить ВСЕ ошибки в одном электронном письме в конце скрипта
Решение
вам нужно будет настроить обработчик ошибок и зарегистрируйте функцию выключения чтобы сделать рассылку.в очень упрощенном примере это могло бы выглядеть примерно так:
<?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' );
?>
Другие советы
Если вы пытаетесь выявить проблемы с кодом, возможно, будет эффективнее просто просмотреть журналы ошибок вашего веб-сервера (учитывая, что у вас есть доступ).Если вы хотите получить их в виде дайджеста, вы можете написать задание cron, которое будет приходить вам по почте каждый день (или что угодно еще).
Если у вас нет доступа к журналам ошибок, то напишите обработчик ошибок и используйте set_error_hander()
это ваш лучший выбор.Я бы все же предложил, чтобы обработчик ошибок записывал данные в файл журнала, а не отправлял вам электронное письмо.Если ваш сайт вообще получит какой-либо трафик, ваш почтовый ящик в мгновение ока будет переполнен.
Лучшее, что вы можете сделать, это, вероятно, написать обработчик ошибок и установить его с помощью set_error_handler .Однако это не будет обрабатывать ВСЕ возможные ошибки.
Вы можете создать пользовательскую функцию для set_error_handler()