PHP: двойно извеждане на php грешки / предупреждения / известия

Ако изпълня следния скрипт:

<?php
error_reporting(E_ALL);
trigger_error('test notice', E_USER_NOTICE);
die('end of script');

Получавам следния изход:

<br />
<b>Notice</b>:  test notice in <b>path/to/script/test.php</b> on line <b>3</b><br />
end of scriptPHP Notice:  test notice in path/to/script/test.php on line 3

Скриптът беше изпълнен на IIS8 с PHP версия 5.4.19.

Върнатият http код на състояние е 200.

„display_errors“ е зададено на „On“, а „error_reporting“ на „E_ALL“ във файла php.ini. Така че първият ред на скрипта е само за пояснение.

Поведението е същото с всички константи за докладване на грешки (E_ERROR, E_WARNING и т.н.).

Някой знае ли откъде идва вторият изход на известието? И особено как да се отървем от него?


person Healerz    schedule 01.04.2014    source източник
comment
Скриптът включва отчитането на грешки за php скриптове. Вижте файла test.php на ред 3 за грешката.   -  person Rahil Wazir    schedule 01.04.2014
comment
Нямам представа за IIS, но PHP от командния ред отпечатва съобщения за грешка както на stdout, така и на stderr. Това изглежда е така и за настройката на вашия уеб сървър.   -  person Álvaro González    schedule 01.04.2014
comment
опитахте ли, като коментирате първия ред error_reporting(E_ALL);.   -  person dhpratik    schedule 02.04.2014
comment
Да, опитах се да го коментирам. Но функцията error_reporting просто дефинира кои типове грешки (нива) ще бъдат изведени, не и ако те наистина бъдат изпратени като изход. Директивата display_errors дефинира това.   -  person Healerz    schedule 02.04.2014


Отговори (3)


Ако зададете и двете

error_reporting(E_ALL);
ini_set('display_errors', 1);

Грешките ще бъдат удвоени:

Бележка за PHP: Недефинирана променлива: тествайте в /path/to/script.php на ред 8

Забележка: Недефинирана променлива: тест в /path/to/script.php на ред 8

Опитайте да изключите едното или другото или задайте персонализиран манипулатор на грешки.

person mpen    schedule 14.04.2015

За да разреша този проблем, трябваше да променя базовите настройки на сайта в IIS: „Свързване като“ с IIS_USER и двойното извеждане на съобщенията за грешки на php изчезна! Все още не знам защо, но поне работи.

person Healerz    schedule 02.04.2014

person    schedule
comment
Съжалявам, но това не е вярно. Функцията error_reporting() не извежда нищо, тя просто презаписва директивата error_reporting, зададена в php.ini. И не предизвиква втория изход. - person Healerz; 02.04.2014