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 из командной строки выводит сообщения об ошибках как на стандартный вывод, так и на стандартный вывод. Похоже, это относится и к настройке вашего веб-сервера.   -  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