2010-05-19 3 views
93
Notice: Constant DIR_FS_CATALOG already defined 

Я уже прокомментировал display_errors в php.ini, но не работает.Как отключить уведомления PHP?

Как заставить PHP не выводить такие вещи в браузеры?

UPDATE

Я положил display_errors = Off там, но она по-прежнему сообщать о таких извещений,

Является ли это проблема с PHP 5.3?

отчетов многочисленные Call Stack тоже ..

+3

Если вы используете Apache, возможно, вам придется перезагрузить сервер! Если вы используете XAMPP, просто выберите «restart» в приложении менеджера. –

+2

Я предлагаю запустить 'grep display_errors/path/to/php.ini', чтобы увидеть, будет ли ваша строка переопределяться где-то вниз по файлу. Это то, что происходило со мной. – usandfriends

+0

Error_reporting - это решение –

ответ

62

Вы можете установить display_errors в 0 или использовать функцию error_reporting().

Однако уведомления раздражают (я могу partly sympathize), но они служат цели. Вы не должны определять константу дважды, второй раз не будет работать, и константа останется неизменной!

+3

+1: Я одобряю упоминание о том, что он должен исправлять ошибки, а не отключать отчетность. И вы сделали это мягче, чем @Jonathan Kuhn :-) – Josh

+1

Нет, кажется, это ошибка php5.3, 'display_errors' не работает должным образом. – user198729

+0

@user вы можете показать запись php.ini, пожалуйста? –

179

Из документации PHP (error_reporting):

<?php 
// Turn off all error reporting 
error_reporting(0); 
?> 

Другие интересные варианты для этой функции:

<?php 

// Report simple running errors 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

// Reporting E_NOTICE can be good too (to report uninitialized 
// variables or catch variable name misspellings ...) 
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

// Report all errors except E_NOTICE 
// This is the default value set in php.ini 
error_reporting(E_ALL & ~E_NOTICE); 
// For PHP < 5.3 use: E_ALL^E_NOTICE 

// Report all PHP errors (see changelog) 
error_reporting(E_ALL); 

// Report all PHP errors 
error_reporting(-1); 

// Same as error_reporting(E_ALL); 
ini_set('error_reporting', E_ALL); 

?> 
+0

Очень полезно и дает ответ на вопрос. Хотя я знаю, что лучше всего исправить все уведомления. Иногда бывает удобно отображать все, кроме уведомлений. – Timo002

+3

Отключение только уведомлений не сработало для меня, используя^NOTICE, как указано в вышеприведенном сообщении. Для PHP v5.3 используйте: E_ALL & ~ E_NOTICE – Chizzle

+2

Это на самом деле ответ, чтобы принять! благодаря! – Besnik

4

Вы можете установить ini_set('display_errors',0); в сценарии или определить, какие ошибки вы хотите отобразить с error_reporting().

+0

Мне нужно было использовать упомянутый здесь метод 'ini_set', метод' error_reporting (0) ', упомянутый в другом месте, не имел никакого эффекта. – pix

3

, не вызывая ошибки:

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever'); 

Если вам действительно нужно, а затем изменить сообщения об ошибках с использованием error_reporting() в E_ALL^​​E_NOTICE.

+1

Если это производственный сайт, независимо от того, считаете ли вы его безошибочным, вы все равно не должны показывать ошибки, если они возникают - поэтому «не вызывая ошибок» кажется немного назойливым ответом на действительный вопрос. – Cam

+5

С каких это пор, когда можно разрешить ошибки на производственном сайте? Я согласен с тем, что на производственном участке вы не должны отображать ошибки, это не то, что я говорил. Я говорил, что вы должны проверить, определена ли константа и установить ее, если нет (именно поэтому я дал образец кода). –

+0

Хотя ваш ответ не был «самым приятным», он, кажется, отвечает на вопрос ОП в полной мере. +1 к вашему ответу и/пожеланию, он был помечен как ответ, потому что это правильный ответ. – Nazca

0

Вы можете проверить, если константа уже определена с помощью:

<?php 
if (!defined('MYCONST')) 
    define('MYCONST', 'Weeha!'); 
?> 
+0

Этого не может сделать весь проект Weeha! – Leonard

0

Я считаю закомментировав display_errors в php.ini не будет работать, потому что по умолчанию включена. Вы должны установить его вместо «Выключить».

Не забудьте перезапустить Apache, чтобы применить изменения конфигурации.

Также обратите внимание, что, хотя вы можете установить display_errors во время выполнения, изменение здесь здесь не влияет на ошибки FATAL.

Как отмечают другие, в идеале во время разработки вы должны работать с error_reporting на максимально возможном уровне и включать display_errors. Несмотря на то, что вы впервые начинаете раздражать, эти ошибки, предупреждения, уведомления и строгие рекомендации по кодированию складываются и позволяют вам стать лучшим кодером.

0

Недавно я нашел этот трюк. Удалите @ в начале строки, которая может вызвать предупреждение/ошибку.

Как будто по магии они исчезают.

+21

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

+9

Это действительно имеет смысл для некоторых случаев, например, при рендеринге переменной, независимо от того, установлена ​​она или пуста. – Frans

+1

Это имеет смысл только тогда, когда у вас есть что-то вроде плагина WordPress, который автор еще не обновил, и вы точно знаете, что вызывает проблему. Это полоса, хотя и не исправление. – Imperative

25

Для командной строки PHP, установите

error_reporting = E_ALL & ~E_NOTICE 

в /etc/php5/cli/php.ini

выполнения команды php затем ommits на уведомления.

+0

Сделав это error_reporting = E_ALL & ~ E_NOTICE & ~ E_WARNING в php.ini. Он отключает уведомление PHP и предупреждения PHP. Так что в браузерах не видны уведомления о php и предупреждения php. –

+0

Это относится к настройкам консоли php. Если вы используете php для создания веб-страниц через apache2, файл конфигурации webserver имеет /etc/php5/apache2/php.ini. Лучше всего использовать phpinfo(), чтобы увидеть, какой файл конфигурации фактически используется. – MilanG

3

Вы ищете:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE" 
+1

Привет @Christian, и добро пожаловать в StackOverflow! В будущем было бы здорово, если бы вы могли добавить немного дополнительного объяснения/детали к вашему ответу, чтобы просветить тех, кто видит, почему/как решение работает/исправляет проблему. Большое спасибо, и счастливое кодирование :) –

+0

точно! Я использую '/ usr/bin/php -d error_reporting =" E_ERROR | E_WARNING | E_PARSE "-f/path/to/file.php' для моего crontab – vladkras

18
<?php 

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

// Report simple running errors 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

// Reporting E_NOTICE can be good too (to report uninitialized 
// variables or catch variable name misspellings ...) 
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

// Report all errors except E_NOTICE 
error_reporting(E_ALL & ~E_NOTICE); 

// Report all PHP errors (see changelog) 
error_reporting(E_ALL); 

// Report all PHP errors 
error_reporting(-1); 

// Same as error_reporting(E_ALL); 
ini_set('error_reporting', E_ALL); 

?> 

источник http://php.net/manual/en/function.error-reporting.php

+1

Разве это не дубликат [этого существующего ответа] (http : //stackoverflow.com/a/2867082/1402846), опубликованные много лет назад? – Pang

+0

У нас есть копия, вставленная из документации php, и оба ответа упомянули ресурсы. –

+0

@AbhishekGoel Единороги являются переодетыми пони, это утверждение не имеет значения, вы все еще дублировали [уже существующий ответ] (http://stackoverflow.com/a/2867082/1900648) четыре года спустя. –

0

Используйте phpinfo() и поиска Configuration File (php.ini) Path, чтобы увидеть, какой конфигурационный файл путь для PHP используется. PHP может иметь несколько конфигурационных файлов в зависимости от среды, в которой он работает. Обычно для консоли это:

/etc/php5/cli/php.ini

и PHP управляет апача это:

/etc/php5/apache2/php.ini

А затем установить error_reporting, как вам это нужно:

http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini-file

0

Как упомянуто так меня, и если вы автор кода, вы должны исправить все эти ошибки, уведомления и т. д., потому что это вызовет больше проблем для вас, а не для их исправления (особенно при обновлении ОС). Для вашего сервера вы должны иметь ошибки, отображаемые только в ваших журналах, а не на экране клиента.

Таким образом, чтобы избежать ошибок в вашем браузере вы используете display_errors флаг, как вы уже нашли:

display_errors = Off 

Теперь реальная проблема, когда вы работаете кто-то другой код. В этом случае изменение кода, вероятно, будет перезаписано при каждом обновлении этого кода. Это утомительно, чтобы поддерживать этот код.

В моем случае, я запускаю PHP с crontab, чтобы иметь скрипт wp-cron.php, выполняющийся раз в то время. Я получал ошибки, отправленные на мои письма, которые становятся утомительными, когда вы получаете по электронной почте каждые 10 минут! В этом случае система Wordpress имеет файл конфигурации, включающий WP_DEBUG, и они вызывают функцию error_reporting(), поэтому попытка изменить переменную error_reporting в командной строке не будет работать. Вместо этого вы должны отредактировать файл wp-config.php в корневой папке и убедитесь, что значение WP_DEBUG установлено на false. В противном случае вы будете получать все эти предупреждения и уведомления все время.

2

Для PHP код:

<?php 
error_reporting(E_ALL & ~E_NOTICE); 

Для php.ini конфигурации:

error_reporting = E_ALL & ~E_NOTICE 
3

Используется эта строка в коде

error_reporting(E_ALL^E_NOTICE); 

Я думаю, что его Helf полный к вам.

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