Отключение строгих стандартов в PHP 5.4

95

В настоящее время у меня есть сайт на php 5.4, до этого я работал на 5.3.8. К сожалению, php 5.4 сочетает в себе E_ALLи E_STRICT, что означает, что мои предыдущие настройки для error_reportingсейчас не работают. Мое предыдущее значение было « E_ALL & ~E_NOTICE & ~E_STRICTДолжен ли я просто включать значения по одному?

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

икомрейд
источник
11
Совет ... Исправьте код, иначе ошибки станут лучше и труднее отлаживать
Баба
7
s / К сожалению / К счастью
NikiC 02
96
Спасибо за совет, однако мне не хватает необходимых знаний, чтобы переписать весь плагин jfusion phpbb3. хотя спасибо за снисходительность.
icomrade
12
Я согласен с нашими друзьями, что вы должны попытаться исправить ошибки, они могут прийти и укусить вас за лодыжку, а также сокрытие всех ошибок затрудняет отладку. Но я также не думаю, что справедливо судить плакат по этому одинокому вопросу, если вам никогда не приходилось писать какую-то ужасную работу, потому что ваш клиент говорит по телефону, проклинает ваших будущих детей, вы не работали с ИТ достаточно долго
Джонатан dos Santos
7
Это вполне разумный вопрос, и да, @icomrade - вы правы насчет снисходительности и сарказма здесь. Это одна из менее привлекательных черт StackOverflow. Тем не менее, я рекомендую вам устранить по крайней мере некоторые из предупреждений, которые вы получаете, даже если вы не можете выполнить их все.
Halfer

Ответы:

139

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

error_reporting = E_ALL

к

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Если у вас нет доступа к php.ini, вы можете поместить его в свой файл .htaccess:

php_value error_reporting 30711

Это значение E_ALL (32767) и удаление значений E_STRICT (2048) и E_NOTICE (8).

Если у вас нет доступа к файлу .htaccess или он не включен, вам, вероятно, потребуется поместить его в верхней части раздела PHP любого скрипта, загружаемого при вызове браузера:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

Один из них должен помочь вам использовать программное обеспечение. Уведомления и строгие правила являются индикаторами проблем или потенциальных проблем, и вы можете обнаружить, что часть кода в PHP 5.4 работает некорректно.

Дэвид Стоктон
источник
11
Я использую php 5.4.5, и я пробовал все вышеперечисленное, но не смог отключить строгие уведомления :( Есть другие идеи?
ro ko
2
Вы можете попробовать поместить & ~ E_DEPRECATED вместе с другими частями в error_reporting (). Какие сообщения вы видите?
Дэвид Стоктон
4
@roko Возможно ли, что ваш код где-то переопределяет это? Я все еще видел серьезные ошибки после отключения его в php.ini, затем я понял, что это было только для некоторых веб-сайтов, использующих Drupal, где значение было установлено в коде
andrewtweber
1
@AndrewSpear Это странно. Теоретически параметр error_reporting должен влиять на ошибки, которые отображаются везде, где они показаны. Параметр display_errors должен влиять на то, получаете ли вы ошибки в выводе (на страницах PHP), а error_log будет влиять на то, где ошибки записываются в журнал. Если display_errors включен, вы должны увидеть на экране те же ошибки, что и в журнале.
Дэвид Стоктон
4
+1 за простой ответ на простой вопрос, не превращаясь в StackOverflow Smuglord ™.
Джошуа Печ
2

.htaccess php_value работает, только если вы используете PHP Server API как модуль веб-сервера Apache. Используйте синтаксис IfModule:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

Если вы используете PHP Server API CGI / FastCGI, используйте

ini_set('error_reporting', 30711);

или

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

в вашем PHP-коде или файлах конфигурации PHP .user.ini | Модификация php.ini:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

на вашем виртуальном хосте, на уровне сервера.

Тарас
источник
1

У меня это сработало, когда я установил error_reporting в двух местах одновременно

где-то в PHP-коде

ini_set('error_reporting', 30711);


и в файле .htaccess

php_value error_reporting 30711
Гузик
источник
Единственное, что сработало для меня без доступа к php.ini, другое из вышеперечисленного не будет работать само по себе, только вернуло ошибку 500. Оба вместе, детка !!!
Джейми Хутбер
1

Если вам нужно также отключить E_DEPRACATED, используйте:

php_value error_reporting 22527

В моем случае CMS Made Simple жаловался: «E_STRICT включен в error_reporting», а также «E_DEPRECATED включен». Добавление этой одной строки в .htaccess устранило обе неверные конфигурации.

ux.engineer
источник
0

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

Луна
источник
Нет. Это потому, что Apache необходимо перезагрузить настройки для PHP. Это AFAIK выполняется только при запуске службы.
svin83