PHP 5 отключить строгие стандарты ошибки


175

Мне нужно настроить мой PHP-скрипт вверху, чтобы отключить отчеты об ошибках для строгих стандартов.

Кто-нибудь может помочь?


8
@ 451F: Я думаю, что ключевые слова здесь - «строгие стандарты». Я не знаю о предыдущих версиях, но с PHP 5.4.0 рекомендуется установить отчет об ошибках E_ALL & ~E_DEPRECATED & ~E_STRICTдля производства. Обратите внимание, что они предлагают вам отключить строгие стандарты.
Поддельный код Обезьяны Рашид

Также найдите файл php.ini и скопируйте его в / usr / local / php5 / lib /
yadhu

Ответы:


185

Вы хотите отключить создание отчетов об ошибках или просто запретить пользователю их видеть? Обычно рекомендуется регистрировать ошибки даже на производственном сайте.

# in your PHP code:
ini_set('display_errors', '0');     # don't show any errors...
error_reporting(E_ALL | E_STRICT);  # ...but do log them

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


11
Просто чтобы явно заявить очевидное: конечно, вы можете установить их и в своем php.iniфайле, например, если вы не можете изменить код PHP.
sschuberth

1
Однако регистрация жестких ошибок на производстве также является плохой практикой. Поскольку вы заполняете свои журналы уведомлениями, которые, вероятно, не имеют значения, вызывая одну или обе из следующих проблем: serverAdmin будет пропускать / игнорировать ошибки, а каталог журналов в какой-то момент будет занимать все пространство сервера.
Ланс

4
Это не работает для меня - пришлось использовать E_ALL & ~ E_STRICT из комментария Fake Code Monkey Rashid из ответа ниже
просто

1
как это работает наряду со следующим, что я нашел в своем php.ini log_errors = On Vs ini_set ('display_errors', '0'); Последний выиграл?
приземлился

@nate, когда вы публикуете некоторый код, пожалуйста, сообщите нам, где мы можем вставить его Я не знаю, куда его поместить: в php.iniили .htaccessили где-то в моем PHP-коде.
Даниил Пронин

89

Без ошибок.

error_reporting(0);

или просто не строго

error_reporting(E_ALL ^ E_STRICT);

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

error_reporting(-1);


56
+1: я считаю, что ^это хорошо только для исключения одного типа ошибки. Если вы хотите отключить дополнительные типы, вы должны использовать E_ALL & ~E_DEPRECATED & ~E_STRICTформат. Или, возможно, (E_ALL & ~(E_DEPRECATED | E_STRICT))формат.
Поддельный код Обезьяны Рашид

10
Примечание: E_STRICT является частью E_ALL начиная с php 5.4
Фред Хаслам

@FakeCodeMonkeyRashid Интересно, почему это так? наверное потому что тогда важен порядок эвакуации?
кодирование

Подавить сообщение об ошибках STRICT в PHP <5.4 ini_set('error_reporting', E_ALL&~E_STRICT); Подавить сообщение об ошибках STRICT в PHP> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
Mel_T

Я хочу отметить, что использование ^("xor"), а не & ~("и не") - плохая идея ! ^зависит от предположения, что, например, E_STRICT является частью E_ALL и всегда будет его частью. Это плохо, потому что E_ALL изменился в прошлом (E_STRICT не был прошлым, но сейчас, начиная с PHP 5.4). Если предположение не ^выполнится однажды, оно не только сломается, но и сделает противоположное тому, что должно было сделать: оно включит E_STRICT из-за того, как работает XOR ( ^). & ~однако всегда отключает E_STRICT, независимо от текущего значения E_ALL. Поэтому & ~следует использовать.
Джей

31

Все вышеприведенные решения верны. Но когда мы говорим о нормальном приложении PHP, они должны быть включены в каждую страницу, которая ему требуется. Способ решить эту проблему - через .htaccessкорневую папку. Просто чтобы скрыть ошибки. [Поместите одну из следующих строк в файл]

php_flag display_errors off

Или

php_value display_errors 0

Далее установить отчет об ошибках

php_value error_reporting 30719

Если вам интересно, как 30719получилось значение , E_ALL (32767), E_STRICT (2048) на самом деле являются константами, которые содержат числовое значение и ( 32767 - 2048 = 30719)


2
Большое спасибо - это помогло (решение .htaccess) в PHP 5.4.7 - ничто иное - даже изменение .ini - помогло.

Я использовал php_admin_value error_reportingдля этого, чтобы работать (в конфиге vhost).
Лу Terrailloune

@Seza, Правильно Исправил.
Starx

1
этот метод не относится к странице, этот метод предпочтителен, поскольку большинство ошибок E_STRICT происходят во время компиляции и не могут быть переопределены во время выполнения
AbiusX

2
Привет, просто чтобы сделать это немного проще, для тех, кто использует wamp, вы можете отключить ошибки, нажав php> php settings >> display errors. Если он отмечен, снимите его.
Хеманг Рами

9

Значением по умолчанию флага error_reporting является E_ALL & ~ E_NOTICE, если оно не установлено в php.ini. Но в некоторых установках (особенно в установках, ориентированных на среды разработки) есть E_ALL | E_STRICT устанавливается как значение этого флага (это рекомендуемое значение при разработке ). В некоторых случаях, особенно когда вы захотите запустить несколько проектов с открытым исходным кодом, которые были разработаны до эры PHP 5.3 и еще не обновлены с учетом передовых методов, определенных PHP 5.3, в вашей среде разработки вы, вероятно, столкнетесь с получением некоторых сообщения, как вы получаете. Лучший способ справиться с этой ситуацией - установить только E_ALL в качестве значения php.ini или в коде. флага error_reporting , либо в (вероятно, в front-контроллере, таком как index.php в web-root, следующим образом:

if(defined('E_STRICT')){
    error_reporting(E_ALL);
}


4

WordPress

Если вы работаете в среде Wordpress, Wordpress устанавливает уровень ошибки в файле wp-includes / load.php в функции wp_debug_mode(). Таким образом, вы должны изменить уровень ПОСЛЕ того, как была вызвана эта функция (в файле, не зарегистрированном в git, так что это только для разработки), или либо изменить непосредственно error_reporting()вызов


Это действительно полезно, у меня был режим отладки для одной установки Wordpress, и я не знал, что он это сделал. Спасибо за информацию!
Тим

2

Я не видел ответа, который был бы чистым и подходящим для готового программного обеспечения, так что вот оно:

/*
 * Get current error_reporting value,
 * so that we don't lose preferences set in php.ini and .htaccess
 * and accidently reenable message types disabled in those.
 *
 * If you want to disable e.g. E_STRICT on a global level,
 * use php.ini (or .htaccess for folder-level)
 */
$old_error_reporting = error_reporting();

/*
 * Disable E_STRICT on top of current error_reporting.
 *
 * Note: do NOT use ^ for disabling error message types,
 * as ^ will re-ENABLE the message type if it happens to be disabled already!
 */
error_reporting($old_error_reporting & ~E_STRICT);


// code that should not emit E_STRICT messages goes here


/*
 * Optional, depending on if/what code comes after.
 * Restore old settings.
 */
error_reporting($old_error_reporting);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.