2010-01-01 3 views

ответ

236

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

error_reporting(E_ERROR | E_PARSE); 
+32

'E_ALL^​​E_WARNING', включающий все сообщения об ошибках, кроме предупреждений, кажется лучшим выбором аргумента' error_reporting'. –

+0

Как правило, я согласен, что в моем случае генерирование предупреждающего сообщения было предполагаемым поведением, поскольку оно было частью моих модульных тестов. – pgee70

5

Вы можете подавить предупреждение, используя error_reporting, но гораздо лучший способ - исправить ваш сценарий в первую очередь.

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

+1

не решенные никакой потребности сценария я использовал error_reporting (0); – Alireza

+7

Safaali, вы должны решить проблемы, а не игнорировать их. – Sampson

+2

Safaali, видя, что у вас есть определенный интерес к PHP, сделайте себе одолжение и изучите этот скрипт. –

79

Вы можете поставить @ перед вашим вызовом функции, чтобы подавить все сообщения об ошибках.

@yourFunctionHere(); 
+3

Это просто скрывает ошибку, это все еще происходит. Ошибки заставляют PHP замедляться, поэтому лучше всего исправить ошибку, если это вообще возможно. Использование @ даже замедляет код при отсутствии ошибки. http://vega.rd.no/articles/php-performance-error-suppression – dprevite

+29

Иногда (к сожалению) у вас действительно нет выбора. Например, PHP-функция parse_url() генерирует предупреждения для «сильно искаженных» URL-адресов, что, возможно, является ошибкой, так как функция возвращает false в этом случае. Поэтому вы должны либо переносить эти предупреждения PHP в своем программном выпуске (может быть неприемлемо для приложений парсера/валидатора), так или иначе подавлять предупреждения, или работать с нарушенным поведением PHP, написав собственный анализатор/валидатор для URL-адресов. В этом случае я выбираю @. – Peter

+1

ВАЖНО: используйте этот метод iff (1), вы не можете исправить проблему, которая генерирует предупреждение, и (2) скрывать ваши предупреждения от конечных пользователей через php error_reporting ... Скрытие предупреждений ваших разработчиков НЕ является решением. –

28

Чтобы подавить предупреждения, оставляя все остальные сообщения об ошибках включена:

error_reporting(E_ALL^E_WARNING); 
9

Не точно ответить на вопрос, но я думаю, что это лучший компромисс в некоторых ситуациях:

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

printf('<div style="display:none">'); 
    ...Third-party stuff here... 
printf('</div>'); 

Предупреждение по-прежнему в источнике страницы как напоминание для меня, но невидимое для клиента.

+4

Лично я использовал бы ['ob_start()'] (http://php.net/manual/en/function.ob-start.php) и ['ob_end_clean()'] (http: // php. net/manual/en/function.ob-end-clean.php). Таким образом, материал даже не отправляется в браузер (который он здесь делает). – h2ooooooo

+6

Вот почему я включил «некоторые ситуации», «предупреждения не следует подавлять» и «напоминать мне». – DaveWalley

+1

Перед тем, как спустить меня, пожалуйста, прочитайте мой ответ. Обратите внимание на «сторонний», «компромисс» и комментарий выше. Я добавил этот ответ, если кто-то еще находится в той же ситуации, в которой я был, и в этой конкретной ситуации это спасло меня, тогда как все остальные ответы были бы не такими хорошими. В следующий раз я буду думать дважды о том, чтобы быть полезным. – DaveWalley

15

Если вы не хотите показывать предупреждения, а также ошибки используют

// Turn off all error reporting 
error_reporting(0); 

Error Reporting - PHP Manual

4

Я думаю, что лучшим решением является конфигурация .htaccess Таким образом, вы не должны изменять код заявление. Вот директивы для Apache2

php_flag display_startup_errors off 
php_flag display_errors off 
php_flag html_errors off 
php_value docref_root 0 
php_value docref_ext 0 
4

в ядре Php, чтобы скрыть предупреждение набор сообщений error_reporting (0) в верхней части общего включают файл или отдельный файл.

В Wordpress hide Warnings and Notices оных следующий код в WP-config.php файл

ini_set('log_errors','On'); 
ini_set('display_errors','Off'); 
ini_set('error_reporting', E_ALL); 
define('WP_DEBUG', false); 
define('WP_DEBUG_LOG', true); 
define('WP_DEBUG_DISPLAY', false); 
1

Если вы хотите, чтобы подавить предупреждения и некоторые другие типы ошибок (например, уведомления), при отображении всех других ошибок, вы можете do:

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE); 
0

Я делаю это как на моем php.ини:

error_reporting = E_ALL & ~ E_WARNING & ~ E_NOTICE & ~ E_STRICT & ~ E_DEPRECATED

Какие журналы только неисправимые ошибки, и никаких предупреждений

+0

Если это не ответ, он должен быть опубликован как комментарий или другой вопрос – Robert

+0

Robert.Это ответ. – navid