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 з підробленого коменту Мавпа Рашида коментар з відповіді нижче
застосувати

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
Fred Haslam

@FakeCodeMonkeyRashid Цікаво, чому це так? можливо, тому що тоді важливий порядок евакуляції?
кодування

Придушити повідомлення про помилки STRICT у PHP <5.4 ini_set('error_reporting', E_ALL&~E_STRICT); Пригнічувати повідомлення про помилки ini_set('error_reporting', E_ALL^E_STRICT);
STRICT

Хочу зазначити, що використання ^("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 config).
Lou Terrailloune

@Seza, правильно виправлено.
Starx

1
це не про сторінку, цей спосіб є кращим, оскільки більшість помилок E_STRICT є час компіляції і їх не можна перекрити під час виконання
AbiusX

2
Привіт просто для того, щоб полегшити його, для тих, хто використовує wamp, ви можете відключити помилки, натиснувши php> php settings >> помилки відображення. Якщо це встановлено, зніміть його.
Hemang Rami

9

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

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

8

У наборі php.ini:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

4

WordPress

Якщо ви працюєте в середовищі wordpress, Wordpress встановлює рівень помилки у файлі wp-include / load.php у функції wp_debug_mode(). Тож вам доведеться змінити рівень ПІСЛЯ error_reporting()виклику цієї функції (у файлі, який не перевіряється в git, тому це лише розробка), або або змінити безпосередньо виклик


Це дуже корисно, у мене був режим налагодження для однієї установки 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.