Вимкнення строгих стандартів у 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

96
Дякую за пораду, однак мені не вистачає необхідних знань, щоб переписати весь плагін jfusion phpbb3. дякую за те, що поблажливо.
icomrade

12
Я погоджуюсь з нашими друзями, що вам слід спробувати виправити помилки, вони можуть прийти і вкусити вам щиколотку, також приховуючи всі помилки, ускладнює налагодження. Але я також не вважаю справедливим судити про плакат за це самотнє запитання, якщо тобі ніколи не доводилося писати якусь огидну роботу, бо твій клієнт телефонує у шістнадцятьох родах з твоїми ненародженими дітьми, з якими ти довго не працював з ІТ
Джонатан dos Santos

7
Це цілком розумне запитання, і так @icomrade - ви маєте рацію щодо поблажливості та сарказму тут. Це одна з менш привабливих рис StackOverflow. З усього сказаного, я рекомендую вам вирішити принаймні деякі попередження, які ви отримуєте, навіть якщо ви не можете їх усіх.
половинка

Відповіді:


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 впливатиме на те, куди помилки записуються в журнал. Якщо показ_помилок увімкнено, на екрані ви побачите ті самі помилки, що і в журналі.
Девід Стоктон,

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

Це спрацювало для мене, коли я встановлював повідомлення про помилки у двох місцях одночасно

десь у коді 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 увімкнено в звіті про помилки", а також "E_DEPRECATED увімкнено". Додавання цього рядка до .htaccess вирішило обидві помилки.


0

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


Ні. Це тому, що Apache потрібно перезавантажити налаштування для PHP. Це робиться AFAIK лише тоді, коли служба запускається.
svin83
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.