Вывод ошибок в .settings.php | Для разработчиков



Если у вас на сайте произошла ошибка, но она не отображается и выводиться надпись  о том, что ошибки нужно включить в файле .settings.php, то значит они у вас отключены в этом файле.

Включить их просто, для этого надо собственно открыть этот файл по FTP или через функционал Битрикс по следующему пути в админке битрикс

Рабочий стол->Контент->Структура сайта->Файлы и папки->bitrix

Здесь представлен многомерный массив данных, ключ-значение. Это основные настройки вашего сайта на битриксе.

Что бы включить отображение ошибок находим строку ‘debug’  которая находится внутри ‘exception_handling’->’value’ и ставим ей значение true вместо false.

Что бы настроить какие именно ошибки мы хотим отображать в ключе ‘exception_errors_types’  указываем код ошибок, например 29687, но он мало понятен, поэтому лучше использовать в значение данного ключа константы через пробел:

‘handled_errors_types’ => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED, 

Здесь мы  перечислили все ошибки, предупредения и тд. Если нужно вывести только ошибки, то остальные константы можно просто убрать, поскольку уведомление 

Загрузка

11772 просмотра

04.05.2019

Теги: 1с-битрикс


Комментариев пока нет

Оставить комментарий


Статьи


  • 1С-Битрикс (17)
  • Apache (2)
  • CSS (1)
  • HTML (1)
  • Java (2)
  • JavaScript (1)
  • JQuery (2)
  • MS-DOS (2)
  • PHP (5)
  • SEO (5)
  • Windows (1)
  • Безопасность (2)
  • Браузер (2)
  • Заработок / Работа (2)
  • Новые технологии (2)
  • Операторы связи (6)
  • Платежные системы (1)
  • Программы (2)
  • Фриланс (3)

Сервисы


Найти среднюю оценку

Прибавить или вычесть процент

Калькулятор процентов

Калькулятор соотношения сторон пропорции ширины и высоты

Калькулятор стоимости кафеля (плитки)

Калькулятор стоимости длины

Калькулятор цен по весу

Калькулятор сравнения (разницы) цен

Калькулятор стоимости товара

Тетрис на Двоих

Проверка домена (whois)




Последние публикации


24. окт.2021 Битрикс Работа с сокетами Ошибка! Не работает
В проверке сайте можно наблюдать такую ошибку
Работа …

17.июл.2021 Как передать Roistat в заказ 1С-Битрикс


Передать ID Roistat можно в сам заказ в Битриксе после его о…

21.июн.2021 Сбой на файле, ошибка распаковки пакета
При очередном обновлении 1С-Битрикс выскочила ошибка [UUGZA0…

03.июн.2020 Не выводиться заглушка в композитном кеше
Столкнулся с тем, что при указании заглушки в динамической о…

01.апр.2020 Установка SSL сертификата LetsEncrypt на BitrixVM
Установка SSL сертификата LetsEncrypt на виртуальную машину …

07.мар.2020 Битрикс настройка SSL, ошибка работы с сокетами
Заходим в меню битрикса выбираем 8. Manage pool web servers …

14.ноя.2019 Не выгружаются заказы в 1С
Не выгружаться заказы в 1С из сайта на битрисе могут по разн. ..

07.ноя.2019 Видео youtube на фон сайта
Как-то на сайт мне нужно было вывести видео на весь экран, к…

05.ноя.2019 Свойство с большим списком (датой)
Если в инфоблоке необходимо использовать свойство типа списо…

05.ноя.2019 Основные настройки BitrixVM
Приведу основные пути и файлы конфигурации в виртуальной маш…



PHP | Обработка исключений

Последнее обновление: 24.03.2021

В процессе работы программы могут возникать различные ошибки, которые могут прервать работу программы. Например, рассмотрим следующую ситуацию:


$a = 5;
$b = 0;
$result = $a / $b;
echo $result;
echo "Конец работы программы";

Программа выводит результат деления. Поскольку делитель равен 0, а на ноль делить нельзя, то при выполнении деления программа завершится, и в браузере мы увидим что-то типа следующего:


Fatal error: Uncaught DivisionByZeroError: Division by zero in D:\localhost\hello. php:11 Stack trace: #0 {main} thrown in D:\localhost\hello.php on line 11

Браузер отобразит нам произошедшую ошибку, причем дальше после строки с делением программа даже не будет выполняться.

Кто-то может сказать, что ситуация искуственная, так как мы сами определили делитель равный нулю. Но данные могут передаваться извне. Кроме того, кроме деления на ноль есть различные ситуации, при которых могут происходить ошибки. Но PHP предоставляет ряд возможностей для обработки подобных ситуаций.

Для обработки исключений в PHP применяется конструкция try-catch:


try
{
	// код, который может вызвать исключение
}
catch(Тип_исключения $ex)
{
	// обработка исключения
}

Эта конструкция в общем варианте состоит из двух блоков — try и catch. В блок try помещается код, который потенциально может вызвать исключение. А в блоке catch помещается обработка возникшего исключения. Причем каждого типа исключения мы можем определить свою логику обработки. Конкретный тип исключения, который мы хотим обработать, указывается в круглых скобках после оператора catch:

catch(Тип_исключения $ex)

После названия типа указывается переменная этого типа (в данном случае $ex

), которая будет хранить информацию об исключении и которую мы можем использовать при обработке исключения.

Если в блоке try при выполнении кода возникает ошибка, то блок try прекращает выполнение и передает управление блоку catch, который обрабатывает ошибку. А после завершения выполнения кода в блоке catch программа продолжает выполнять инструкции, которые размещены после блока catch.

Если в блоке try при выполнении кода не возникает ошибок, то блок catch не выполняется, а после завершения блока try программа продолжает выполнять инструкции, которые размещены после блока

catch.

Например, обработаем ошибку с делением на ноль:


try
{
	// код, который может вызвать исключение
	$a = 5;
	$b = 0;
	$result = $a / $b;
	echo $result;
}
catch(DivisionByZeroError $ex)
{
	// обработка исключения
	echo "Произошло исключение:<br>";
	echo $ex . "<br>";
}
echo "Конец работы программы";

В данном случае код деления на ноль, поскольку он может потенциально вызвать ошибку, помещен в блок try.

В блоке catch обрабатывается ошибка типа DivisionByZeroError, которая генерируется при делении на ноль. Вся обработка сводится к выводу информации на экран.

В итоге при выполнении программа выведет следующее:


Произошло исключение:
DivisionByZeroError: Division by zero in D:\localhost\hello.php:14 Stack trace: #0 {main}
Конец работы программы

Как видно из вывода программы, она не завершается аварийно при делении на ноль, а продолжает работу.

Типы ошибок и исключений

В PHP для разных ситуаций есть множество типов, которые описывают ошибки. Все эти встроенные типы применяют интерфейс Throwable:

Все типы делятся на две группы: собственно ошибки (класс Error) и собственно исключения (класс Exception). А от классов

Error и Exception наследуются классы ошибок и исключений, которые описывают конкретные ситуации. Например, от класса Error наследуется класс ArithmeticError, который описывает ошибки, возникающие при выполнении арифметических операций. А от класса ArithmeticError наследуется класс DivisionByZeroError, который представляют ошибку при делении на ноль.

Блок catch

Конструкция try..catch позволяет определить несколько блоков catch — для обработки различных типов ошибок и исключений:


try
{
	$result = 5 / 0;
	echo $result;
}
catch(ParseError $p)
{
    echo "Произошла ошибка парсинга";
}
catch(DivisionByZeroError $d)
{
	echo "На ноль делить нельзя";
}

При возникновении ошибки будет для ее обработки будет выбираться тот блок catch, который соответствует вошникшей ошибки. Так, в данном случае при делении на ноль будет выполняться второй блок catch.

Если бы в блоке try возникла бы ошибка, которая бы не соответствовала типам из блоков catch (в данном случае — типам DivisionByZeroError и ParseError), то такая ошибка не была бы обработана, и соответственно программа бы аварийно завершила свое выполнение.

Блоки catch с более конкретными типами ошибок и исключений должны идти в начале, а более с более общими типа — в конце:


try
{
	$result = 5 / 0;
	echo $result;
}
catch(DivisionByZeroError $ex)
{
	echo "На ноль делить нельзя";
}
catch(ArithmeticError $ex)
{
	echo "Ошибка при выполнении арифметической операции";
}
catch(Error $ex)
{
	echo "Произошла ошибка";
}
catch(Throwable $ex)
{
	echo "Ошибка при выполнении программы";
}

Класс DivisionByZeroError унаследован от ArithmeticError, который, в свою очередь, унаследован от Error, реализующего интерфейс Throwable. Поэтому класс DivisionByZeroError представляет более конкретный тип и представляемые им ошибки должны обрабатываться в первую очередь. А тип Throwable представляет наиболее общий тип, так как ему соответствуют все возможные ошибки и исключения, поэтому блоки catch с таким типом должны идти в конце.

В данном случае опять же в блоке try происходит ошибка деления на ноль. Но этой ошибке соответствуют все четыре блока catch. Для обработки PHP будет выбирать первый попавшийся, который соответствует типу ошибки. В данном случае это блок для обработки ошибки типа DivisionByZeroError.

Если нам надо обрабатывать в принципе все ошибки и исключения, то мы можем определить только обработку общего для всех них типа Throwable:


try
{
	$result = 5 / 0;
	echo $result;
}
catch(Throwable $ex)
{
	echo "Ошибка при выполнении программы";
}

Начиная с версии PHP 8.0 в блоке catch можно просто указать тип обрабатываемого исключения, не определяя переменную:


catch(DivisionByZeroError)
{
	echo "Произошло исключение: деление на ноль";
}

Получение информации об ошибках и исключениях

Интерфейс Throwable предоставляет ряд методов, которые позволяют получить некоторую информацию о возникшем исключении:

  • getMessage(): возвращает сообщение об ошибке

  • getCode(): возвращает код исключения

  • getFile(): возвращает название файла, в котором возникла ошибка

  • getLine(): возвращает номер строки, в которой возникла ошибка

  • getTrace(): возвращает трассировку стека

  • getTraceAsString(): возвращает трассировку стека в виде строки

Применим некоторые из этих методов:


try
{
	$result = 5 / 0;
	echo $result;
}
catch(DivisionByZeroError $ex)
{
	echo "Сообщение об ошибке: " .  $ex->getMessage() . "<br>";
	echo "Файл: " . $ex->getFile() . "<br>";
	echo "Номер строки: " . $ex->getLine() . "<br>";
}

Результат работы:


Сообщение об ошибке: Division by zero
Файл: D:\localhost\hello.php
Номер строки: 11

Блок finally

Конструкция try..catch также может определять блок finally. Этот блок выполняется в конце — после блока try и catch вне зависимости, возникла или нет ошибка. Нередко блок finally используется для закрытия ресурсов, которые применяются в блоке try.


try
{
	$result = 5 / 0;
	echo $result . "<br>";
}
catch(Throwable $ex)
{
	echo "Ошибка при выполнении программы<br>";
}
finally
{
	echo "Блок finally<br>";
}
echo "Конец работы программы";

Вывод программы:


Ошибка при выполнении программы
Блок finally
Конец работы программы

Конструкция try. .catch..finally может содержать либо все три блока, либо только два блока try и либо блок catch, либо блок finally.

НазадСодержаниеВперед

Как управлять сообщениями об ошибках PHP с помощью директивы display_errors

Как управлять сообщениями об ошибках PHP с помощью директивы display_errors

В этой статье описывается, как включать и отключать сообщения об ошибках PHP с помощью директивы display_errors в файле php.ini .

Информация в этой статье относится только к определенным типам учетных записей хостинга. Чтобы определить, относится ли приведенная ниже информация к вашей учетной записи, ознакомьтесь с этой статьей.

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

Содержание
  • Сообщения об ошибках и директива display_errors
  • Дополнительная информация
Сообщения об ошибках и директива display_errors

По умолчанию PHP отображает сообщения об ошибках в веб-браузере пользователя. Эта функция очень полезна при начальной разработке и отладке вашего веб-сайта. Однако после завершения разработки веб-сайта отображение сообщений об ошибках может представлять угрозу безопасности. Сообщения об ошибках могут раскрывать информацию о вашем веб-сайте, такую ​​как информация о пути и переменные, которые следует держать в секрете.

Директива display_errors определяет, будет ли PHP отображать сообщения об ошибках в веб-браузерах пользователей. Чтобы запретить PHP отображать сообщения об ошибках, используйте текстовый редактор для изменения директивы display_errors в файле php.ini следующим образом:

 display_errors = off 

директива в файле php.ini следующим образом:

 display_errors = on 

Чтобы проверить текущее значение директивы display_errors и других директив, вы можете использовать функцию phpinfo(). Для получения дополнительной информации см. эту статью.

Дополнительная информация
  • Чтобы просмотреть полный список директив php.ini , посетите http://www.php.net/manual/en/ini.list.php.
  • Для получения дополнительной информации о директиве display_errors посетите http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors.

Детали статьи

  • Уровень: Средний
Другие статьи в этой категории
  • Сообщения об ошибках PHP
  • Регистрация ошибок PHP
  • Часовые пояса PHP
  • Максимальное время выполнения PHP
  • PHP директива allow_url_fopen
  • PHP директива register_globals
  • Директива о магических кавычках PHP
  • PHP максимальный размер загружаемого файла
  • Ограничение памяти PHP-скрипта
  • PHP max_input_vars директива
  • PHP директива expose_php
  • PHP директива output_buffering
  • Директива PHP disable_functions

Показать больше

Статьи по теме
  • Пользовательские файлы php. ini
  • Использование директив php.ini

Показать больше

Развивайте свой веб-бизнес

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

Бесплатно. Отписаться в любое время.

Была ли эта статья полезной для вас? Тогда вам понравится наша поддержка. Испытайте преимущества хостинга A2 уже сегодня и получите предварительно защищенный и предварительно оптимизированный веб-сайт. Ознакомьтесь с нашими планами веб-хостинга сегодня.

Улучшение сообщений об ошибках PHP в IIS 7

  • Статья
  • 5 минут на чтение

от Тали Смит

Ошибки PHP часто не предоставляют достаточно подробностей, чтобы помочь диагностировать ошибки, возникающие в рамках. К ним относятся основные ошибки, такие как 404 Not Found. Из-за этого функция «подробных сведений об ошибках» по умолчанию для приложений PHP может быть неэффективной для устранения основных ошибок.

Информационные службы Интернета (IIS) улучшают обработку ошибок PHP, перехватывая распространенные состояния ошибок и обеспечивая перенаправление для общих кодов состояния HTTP.

По умолчанию IIS настроен на отправку подробных сообщений об ошибках локальным клиентам и общих сообщений об ошибках удаленным клиентам. Это сделано для обеспечения эффективного локального устранения неполадок и защиты производственных приложений от раскрытия конфиденциальных сведений удаленным клиентам при возникновении ошибок.

IIS создает очень подробные сообщения об ошибках для большинства ошибок. Они содержат, как минимум, информацию о запросе и ошибке, в том числе о том, какой модуль сгенерировал ошибку и в какой части обработки запроса. Для ошибок, вызванных IIS и его встроенными модулями, ошибки также содержат вероятные решения. Это значительно упрощает процесс устранения большинства ошибок.

В этой статье, основанной на практических занятиях в учебном комплекте PHP для Windows, описывается, как IIS обеспечивает обработку основных ошибок и как IIS диагностирует ошибки на уровне приложения, включая сообщения об ошибках PHP.

Базовая обработка ошибок

IIS улучшает обработку ошибок PHP, перехватывая распространенные состояния ошибок и обеспечивая перенаправление для общих кодов состояния HTTP.

Обратите внимание, что службы IIS также поддерживают сообщения об ошибках, генерируемые платформами приложений, которые часто предлагают информацию о приложении, помогающую диагностировать ошибки приложения. Например, Microsoft® ASP.NET использует это преимущество для предоставления подробной трассировки стека исключений и другой информации.

Если вы запросите страницу http://localhost:84/notfound.php из Windows® Internet Explorer®, вы получите стандартную ошибку «Не найдено» — неописательную страницу ошибки 404.


Рис. 1. Неописательное сообщение об ошибке 404

Стандартное сообщение об ошибке IIS «Не найдено» предоставляет полезную информацию, помогающую диагностировать состояние ошибки; он правильно идентифицирует ошибку и предлагает решения для наиболее распространенных ошибок, предоставляя такую ​​информацию, как источник (модуль, уведомление) ошибки и справочную информацию, такую ​​как URL-адрес, сопоставленный физический путь и используемый метод аутентификации. Например:

  • Информация ответа: HTTP 404 не найден.
  • Подробная информация об ошибке: модуль (веб-ядро IIS), уведомление (MapRequestHandler), обработчик (StaticFileHandler) и код ошибки (0x80070002 — файл не найден).
  • Информация о запросе: запрошенный URL-адрес и физический путь C:\inetpub\troubleshootingPhp\notfound.txt .
  • Раздел «Наиболее вероятные причины» правильно предлагает наиболее вероятную причину ошибки: «Указанный каталог или файл не существует на веб-сервере».
  • В разделе «Что можно попробовать» предлагается соответствующее решение: «Создайте содержимое на веб-сервере».


Рисунок 2: Подробное сообщение об ошибке 404

Вы также можете получить подробные сведения об ошибках IIS для некоторых ошибок PHP, настроив IIS для выполнения дополнительной проверки запросов PHP.

Чтобы настроить IIS для обеспечения дополнительной проверки запросов PHP, выполните следующие действия:

  1. Переключитесь на IIS Manager . Если он закрыт, щелкните Start , а затем выберите Internet Information Services (IIS) Manager .

  2. В дереве слева щелкните узел сервера.

  3. В разделе IIS дважды щелкните Сопоставления обработчиков , чтобы изменить сопоставление обработчика PHP.

  4. Щелкните правой кнопкой мыши запись PHP через FastCGI и выберите Изменить .

  5. Нажмите Ограничения запроса .

  6. Установите флажок Вызывать обработчик, только если запрос сопоставлен с .

  7. Оставьте выбранной кнопку выбора Файл .

  8. Нажмите OK дважды.

  9. Нажмите Да в диалоговом окне Редактировать сопоставление модуля .

  10. Для проверки снова активируйте условие «Не найдено», чтобы убедиться, что ошибка PHP 404 теперь обрабатывается IIS, предоставляя более подробную информацию. Использование Internet Explorer , запрос http://localhost:84/notfound.php (эта страница не существует).

  11. Вы получаете подробное сообщение об ошибке IIS, указывающее, что страница Notfound.php не найдена на сервере.

    Подробная информация об ошибке IIS 401.3 Unauthorized также предоставляет информацию; это указывает на то, что у запроса нет разрешения на просмотр страницы из-за конфигурации списка управления доступом (ACL), и предоставляет подробное объяснение того, как решить эту проблему.


    Рис. 3. Ошибка «Отказано в доступе»

Включить сообщения об ошибках PHP для диагностики ошибок на уровне приложения

Настройка IIS для проверки запросов приводит к тому, что IIS пытается открыть файл сценария PHP, соответствующий URL-адресу запроса, и генерирует подробные сообщения об ошибках для любых условий, которые исключают это. Обычно это:

  • Файл не найден
  • Доступ запрещен из-за неправильных разрешений
  • Доступ запрещен из-за недостаточной аутентификации
  • Для большинства других ошибок, особенно тех, которые возникают на уровне приложения, подробные сообщения об ошибках IIS не содержат достаточной информации для эффективной диагностики ошибки.

Крупнейшими примерами таких ошибок являются ошибки синтаксического анализа и интерпретации сценариев. Несмотря на то, что для этих ошибок можно принудительно выводить подробные сообщения об ошибках IIS, обычно это не дает никакого значения при диагностике основной причины ошибки. В этих случаях вы должны полагаться на информацию, предоставленную PHP, для диагностики этих ошибок.

По умолчанию PHP не настроен на отображение этих ошибок в ответе, чтобы предотвратить раскрытие конфиденциальной информации.

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

Если вы запрашиваете страницу с ошибкой сценария, вы получаете подробное сообщение об ошибке IIS. Это происходит потому, что по умолчанию PHP не генерирует ответ с подробной информацией об ошибке, поэтому IIS вставляет свою общую подробную ошибку «500 Server Error». Хотя эта ошибка правильно предполагает, что PHP вернул код ошибки 500, она не предоставляет специфичной для приложения информации о том, что вызвало ошибку.

Вы можете настроить PHP для отображения ошибок в ответах.

  1. С помощью проводника Windows® перейдите к C:\PHP .

  2. Откройте файл Php.ini в каталоге установки PHP.

  3. Найдите и установите директиву display_errors = On :

     <<
    ; Распечатать ошибки (как часть вывода). Для производственных веб-сайтов,
    ; вам настоятельно рекомендуется отключить эту функцию и использовать ведение журнала ошибок.
    ; вместо этого (см. ниже). Включение display_errors на рабочем веб-сайте
    ; может раскрывать конечным пользователям информацию о безопасности, такую ​​как пути к файлам на вашем веб-сайте.
    ; сервер, схема вашей базы данных или другая информация.
    ;
    ; возможные значения для display_errors:
    ;
    ; Off — не отображать никаких ошибок; stderr - Отображать ошибки в STDERR (влияет только на двоичные файлы CGI/CLI!)
    ; On или stdout — отображать ошибки в STDOUT (по умолчанию)
    ;
    ; Чтобы вывести ошибки в STDERR с помощью CGI/CLI:
    ; display_errors = "stderr"
    ;
    ; По умолчанию
    ;
    display_errors = Вкл.
    >>
     
  4. Сохраните и закройте файл.

  5. Сброс IIS. Нажмите Пуск , а затем выберите Командная строка , щелкните правой кнопкой мыши и выберите Запустить от имени администратора , чтобы открыть окно командной строки.

  6. Тип iisreset.exe

  7. Нажмите Введите .

Если сейчас запросить страницу с ошибкой скрипта, вы получите ошибку синтаксического анализа PHP:

 <<
Ошибка синтаксического анализа: ошибка синтаксического анализа в C:\inetpub\troubleshootingPhp\error.php в строке 3 >>
 

Если вы видите только стандартную страницу внутренней ошибки сервера HTTP 500 Internet Explorer, вы должны отключить понятные сообщения об ошибках. В Internet Explorer Перейдите на вкладку Инструменты , Свойства обозревателя , Дополнительно и снимите флажок Показать понятные сообщения об ошибках HTTP .