Intereting Posts
PHP – обрезание изображения с помощью imagecopyresampled ()? Как получить доступ к нескольким свойствам с помощью магического метода (__ get & __set)? WooCommerce – автоматическое обновление общей цены при изменении количества Точно определите тип ОС, на котором работает PHP. читать содержимое PST-файла с помощью php Как загрузить несколько файлов с помощью PHP, jQuery и AJAX Проблема с настройкой полосы Zend Framework 2 устанавливает пользовательский макет и задает проблему Есть ли способ получить размер переменной PHP в байтах? Doctrine2 в ZF2 – DQL дает отличный результат, чем метод findOneBy Работа с eacute и другими специальными символами с использованием Oracle, PHP и Oci8 Сессии PHP: Объяснение, пожалуйста? PHP htaccess Перенаправить URL-адрес с строкой запроса от верхнего регистра к нижнему регистру Как добавить элемент в другой элемент, используя php REACT JS: отображение массива объектов для рендеринга в JSX

Числовые значения уровней отчетов об ошибках

Я проверяю конфигурацию моего 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.