Я проверяю конфигурацию моего PHP-сервера, и мне нужно установить следующий параметр следующим образом:
error_reporting установлен на E_ALL & ~E_NOTICE
Однако на моем сервере установлено числовое значение:
error_reporting 6135 6135
Мне было интересно, что это значит, и если мне действительно нужно его изменить
благодаря
Со страницы мы имеем:
E_ALL
имеет значение 30719
в PHP 5.3.x, 6143
в PHP 5.2.x, 2047
ранее
E_NOTICE
имеет значение 8
Похоже, вы используете PHP 5.2.x
Теперь, если вы делаете E_ALL & ~E_NOTICE
Это побитовое дополнение к E_NOTICE
за которым следует побитовое обращение с E_ALL
мы получаем
6143 & (~8) = 6135
Значения, используемые для сообщения об ошибках
E_RECOVERABLE_ERROR 4096 + E_USER_NOTICE 1024 + E_USER_WARNING 512 + E_USER_ERROR 256 + E_COMPILE_WARNING 128 + E_COMPILE_ERROR 64 + E_CORE_WARNING 32 + E_CORE_ERROR 16 + E_PARSE 4 + E_WARNING 2 + E_ERROR 1 + = 6135
Флаги ошибок имеют мощность 2 целых числа, поэтому вы можете комбинировать их с помощью битовых операторов. Результатом является целое число, подобное тому, которое вы видите, поэтому, если вы установите его на E_ALL & ~ E_NOTICE, он все равно окажется целым. Какие флаги содержат значение 6135, зависит от вашей версии php. Вы можете проверить, содержится ли в нем флаг, используя побитовое и операторное, например
if ((error_reporting() & E_NOTICE) == E_NOTICE) { echo "E_NOTICE is active"; }
foreach( array('E_ALL', 'E_NOTICE', '~E_NOTICE', 'E_ALL&~E_NOTICE') as $s) { eval("\$v=$s;"); printf("%20s = dec %10u = bin %32b\n", $s, $v, $v); }
результат
E_ALL = dec 6143 = bin 1011111111111 E_NOTICE = dec 8 = bin 1000 ~E_NOTICE = dec 4294967287 = bin 11111111111111111111111111110111 E_ALL&~E_NOTICE = dec 6135 = bin 1011111110111
Обратите внимание, что error_reporting(-1);
будет сообщать обо всех и любых ошибках PHP.
error_reporting 6135 не будет регистрировать уведомления Runtime, поэтому лучше использовать
error_reporting(E_ALL);
с последующим
ini_set('display_errors', '0');
Это приведет к регистрации всех ошибок, включая уведомления о времени выполнения, но покажет отображение в браузере. Это можно использовать в любых версиях PHP.