2012-02-04 4 views
1

Когда я вызываю функцию почты PHP на моем сервере тестирования, я получаю предупреждение. Это правильно, потому что у меня нет почтового сервера, который может протестировать систему, когда торговый центр выходит из строя. Я хочу, чтобы эта функция не выдавала предупреждение. Как я смогу достичь этого?Отключить предупреждение о функции почты PHP

Функция сама по себе все еще не работает. (Т.е. возвращать ложь)

Спасибо Майкл

+0

Вы пытаетесь определить, доступен ли почтовый сервер? Например, возможно, в сценарии установки/среды? –

+0

Спасибо за все ответы. В моем случае я запускал сценарий Ajax php, который, среди прочего, отправлял почту. Я не мог иметь выход из файла php, включая предупреждение, потому что почта не так важна, и если она не удалась, это было бы зарегистрировано. Я уже слышал об операторе подавления @, и я бы попробовал не использовать его, но в этом случае я считаю, что это хорошее решение. –

ответ

1
use @mail(parameters...) 

@supresses любую ошибку отчетности выходной почты может производить

Вы также можете suprress предупреждения все вместе

error_reporting(E_ALL ^E_WARNING) to supress warnings all together 
0

Что плохого ж/@?

@mail(// should suppress errors); 
+0

Хммм, интересно, говорит ли он о * просто * выходе или журнале ошибок. Поскольку некоторые серверы (например, мои) все равно будут записывать ошибку в журнал ошибок Apache, даже если это будет подавлено исполняющим скриптом. – animuson

+0

Это будет больше в соответствии с директивой log_errors, а затем, что касается первого ответа. Работа с ней на основе каждой функции будет sucky tho. – quickshiftin

+1

Оператор ['@ @ suppression] (http://php.net/manual/en/language.operators.errorcontrol.php) IMO - это [анти-шаблон] (http://en.wikipedia.org/wiki/Error_hiding), который слишком легко злоупотребляют или злоупотребляют. Более эффективные методы существуют почти во всех вариантах использования для этого оператора, и мой собственный подход будет состоять в том, чтобы исследовать основную причину (или определить, что пытается достичь), и найти лучший способ, который ее опускает. –

3

Вместо того чтобы пытаться подавить действительное предупреждение, почему бы просто не пропустить функцию рассылки на тестовом сервере?

ли что-то вроде

if($_SERVER[ 'SERVER_NAME' ] != 'my.testing.server'){ 
    mail(...); 
} 

Или, еще лучше, установить глобальную переменную, что вы можете проверить для определения, если ваш сервер находится в режиме разработки/тестирования/производства. Тогда вы можете просто пропустить метод почты, если он не находится в рабочем режиме.

Вы можете подавлять предупреждающие сообщения с помощью @, но тогда вы рискуете оставить код на месте, который может подавить предупреждение, когда код будет развернут на рабочий сервер.

+0

Это лучшее решение, потому что оно только подавляет предупреждения в вашей среде разработки. – andrewtweber

+0

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

+0

@Michael Еще лучше отключить одну функцию почты, чем ВСЕ предупреждения! Я бы решительно решил выбрать это как лучший ответ, а не тот, который вы выбрали. – andrewtweber

Смежные вопросы