Отчет об ошибках PHP и почта () - PullRequest
3 голосов
/ 30 июня 2011

В настоящее время я получаю set_error_handler(), бросая ErrorException всякий раз, когда что-либо встречается.Кроме того, у меня error_reporting() на -1, поэтому неправильная индексация массива вызывает исключение.

В любом случае, это краткий обзор моей среды ошибок / отчетов;функция PHP mail() выдает ошибки на моей ( Win7 ) машине разработки во время процесса, предназначенного для проекта, потому что у меня не установлен почтовый сервер.Я попытался поставить префикс с @, чтобы закрыть его, но он все равно вызывает ошибку и, следовательно, выдает исключение.Я мог бы обернуть это с try{}, но мне любопытно, почему это не закрывается.

Почему это не закрывается?

Повторюсь,мы можем почти удалить mail() из уравнения (насколько я могу судить );Я просто хочу знать, почему @ не будет выполнять свою работу при таких обстоятельствах, с mail() или любой другой функцией.Я просто подумал, что mail() может быть особым случаем по какой-то причине.


Спасибо нашему другу XDebug:

(!) ErrorException: mail () [function.mail]: не удалось подключиться к почтовому серверу через порт «localhost» 25, проверить настройки «SMTP» и «smtp_port» в php.ini или использовать ini_set () в C: \ xampp \ htdocs \ dbc_relaunch_2-0-0 \ mf \ handlers \ api \ mail \ send.php в строке 16


Хорошо, я просто пошел с:

try{
    mail($args);
catch(Exception $exception){
    return $failure;
}
return $success;

Вместо:

if(@mail($args)){
    return $failure;
}
return $success;

И все хорошо;Я просматриваю ответ @Pheonix по ссылке, но любой, у кого есть короткий ответ на вопрос, почему он может ответить бесплатно.

Ответы [ 3 ]

4 голосов
/ 30 июня 2011

Не могли бы вы показать нам свой обработчик ошибок?Обратите внимание, что ваш обработчик будет вызван в случае ошибки, независимо от вашей настройки error_reporting(), и даже если вы добавите к своей функции @.

. Особо следует отметить, что это значение будетбыть 0, если оператор, вызвавший ошибку, был добавлен оператором @ error-control.

На странице руководства set_error_handler().

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

2 голосов
/ 30 июня 2011

Это не очень хороший ответ, но я подозреваю, что это потому, что исключения «сообщения» и «ошибки» не совпадают.

php-exceptions-vs-errors говоритнемного об этом, но я обнаружил, что, согласно этому комментарию , кажется, что set_error_handler() на самом деле переопределяет символ @.

Тем не менее, попробуйте, catch всегдалучший подход при работе с исключениями.

Надеюсь, это немного помогло.

2 голосов
/ 30 июня 2011

Вот интересное прочтение

Как мне перехватить PHP-фатальную ошибку

На этой странице обсуждается именно то, чего вы пытаетесь достичь.

...