Show error битрикс

При разработке под Битрикс можно пользоваться не только логами, установленными в конфигурации сервера, но и своими. Для этого нужно настроить обработчик ошибок в секции exception_handling в файле /bitrix/.settings.php.

Обработка ошибок в Битрикс

При разработке под Битрикс можно пользоваться не только логами, установленными в конфигурации сервера, но и своими. Для этого нужно настроить обработчик ошибок в секции exception_handling в файле /bitrix/.settings.php.

'exception_handling' =>
    array (
        'value' =>
            array (
              'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
              'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
              'ignore_silence' => true,
              'assertion_throws_exception' => false,
              'assertion_error_type' => 256,
              'debug' => true,
              'log' => array (
                            'settings' => array (
                            'file' => 'bitrix/modules/error.log',
                            'log_size' => 1000000,
                            ),
            ),
    ),
),
  • handled_errors_types — типы обрабатываемых ошибок

  • exception_errors_types — типы ошибок, в случае которых системой выбрасывается исключение, и работа скрипта останавливается

  • ignore_silence — отменить действие оператора подавления ошибок (значок @ перед функцией, например @file(), документация).

  • assertion_throws_exception — выбрасывают ли утверждения (assert()) исключения.

  • assertion_error_type — тип ошибки для неверного утверждения (по умолчанию — 256 E_USER_ERROR)

  • debug — если выставить debug = true, информация об ошибке будет выведена пользователю в браузер. Если debug = false, при возникновении ошибки будет выведено стандартное сообщение от Битрикс, кроме ошибок E_ERROR | E_PARSE

if ($this->debug)
{
    error_reporting($this->handledErrorsTypes);
    @ini_set('display_errors', 'On');
    @ini_set('display_startup_errors', 'On');
    @ini_set('report_memleaks', 'On');
}
else
{
    error_reporting(E_ERROR | E_PARSE);
}

При отключении режима отладки, также сбрасываются настройки для assert()

if ($this->debug)
{
  assert_options(ASSERT_ACTIVE, 1);
  assert_options(ASSERT_WARNING, 0);
  assert_options(ASSERT_BAIL, 0);
  assert_options(ASSERT_QUIET_EVAL, 0);
  assert_options(ASSERT_CALLBACK, array($this, "handleAssertion"));
}
else
{
   assert_options(ASSERT_ACTIVE, 0);
}
  • log — секция с указанием логгера. Если пусто, то запись ошибок происходить не будет. В данном случае по умолчанию всю работу на себя возьмет объект класса BitrixMainDiagFileExceptionHandlerLog.
  • settings — секция с настройками обработчика ошибок. Можно задавать произвольные параметры. Они все передадутся массивом в метод initialize() обработчика.
  • file — относительный путь к файлу логов от корневой директории сайта (BitrixMainApplication::getDocumentRoot().’/’.$file).
  • log_size — максимальный размер файла логов в байтах.

Можно использовать собственный обработчик ошибок для записи логов. Для этого в секции log нужно указать:

'class_name' => 'MyLog',
'extension' => 'MyLogExt',
'required_file' => 'modules/mylog.module/mylog.php'
  • class_name — имя класса-обработчика. Класс должен наследоваться от BitrixMainDiagExceptionHandlerLog. Метод write в 16 версии отличается от реализации в 15 версии, эта несовместимость может сломать сайт, будьте внимательны.
  • extension — подключаемое расширение, содержащее класс-обработчик
  • required_file — файл, содержащий нужный класс.

Модули АХТУНГ 500 И АХТУНГ 500 ПРО

Модули Ахтунг 500 и Ахтунг 500 ПРО предназачены для мгновенного оповещения об ошибках по e-mail и через браузер, когда администратор находится на сайте.

Мониторинг ошибок происходит не только через обработчик ошибок Битрикса, но и через чтение файлов логов сервера, есть поиск.

Перейти к подробному описанию Ахтунг 500 ПРО

На сайте происходит экспорт товаров на сторонний ресурс через API.
Создан отдельный класс для работы с API который вызывается по событию «OnAfterIBlockElementAdd», все работает корректно, Но существуют события когда по какой то причине API отдает ошибку (невалидные данные, лимит аутентификации…). Эти ошибки пишутся в файл логов. (КМ забывает его проверять, от этого и проблема). Стоит задача сообщать КМ об ошибке «алертом на экран». Как это сделать?

public function setItemToOnliner($trueID, $data, $jwtToken)   
{
	if (!empty($error)) {
	  AddMessage2Log(print_r('error ONLINER '.$trueID), true));
	  $this->exportError();
	}
}
static function exportError() 
{ 
	AddMessage2Log(print_r('error', true));  
	echo '<script type="text/javascript">alert("error")</script>';
}

Функция exportError() не выводит alert. Подскажите может кто знает как решить…

<?
/*=======================*/
  //init.php
/*=======================*/
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("ExportToPortal", "onlinerExport")); 

CModule::AddAutoloadClasses(
    '', //не указываем имя модуля, так как автозагрузка устанавливается глобально 
    array(
        'ExportPortal' => '/local/classes/exportportal.php',    
    )
);
 
class ExportAll
{   
  function onlinerExport(&$arFields) { 
    if ($arFields["IBLOCK_ID"] == 2) {
      $Onliner = new ExportPortal;
      $Onliner->setOnliner(['ID'=>$arFields['ID'], 'SOLD'=>(!empty($arFields['PROPERTY_VALUES']['338'])) ? 'Y' : 'N' ], $arFields["IBLOCK_SECTION"][0]);   
    }
  }
}
/*=======================*/
  //exportportal.php
/*=======================*/

class ExportPortal extends CModule {

    public function setOnliner($data, $section)  
    {
      $access = $this->getAccessOnliner();  
      if (!empty($access['access_token'])) { 
        $arrOnliner = $this->setItemOnliner($data['ID'], $section); 
        if (!empty($arrOnliner['ITEM'])) {  
          if ($data['SOLD']=='Y') {
            $this->removeItemOnliner($arrOnliner['ONLINER_ID'], $access['access_token']); 
          } else {
            $this->setItemToOnliner($data['ID'], $arrOnliner, $access['access_token']); 
          }
        }
      }
    }
    public function setItemToOnliner($trueID, $data, $jwtToken)   
    {
      /*.........*/
      if (!empty($error)) {
        AddMessage2Log(print_r('error ONLINER '.$trueID), true));
        $this->exportError();
      }
      /*.........*/
    }
    static function exportError() 
    { 
      CAdminMessage::ShowMessage('ERROR');
    }


}

Битрикс 17.0.9

На чтение 4 мин. Просмотров 1.2k. Опубликовано 15.12.2019

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

Это уведомление, я назову это именно так — уведомление, т.к. мы еще не знаем в чем же дело, битрикс нас просто информирует о том, что при выполнении скрипта возникла ошибка, не более того.

Итак рассмотрим по порядку:

Содержание

  1. Почему может появиться это уведомление?
  2. Что делать, если появляется сообщение «при выполнении скрипта возникла ошибка»?
  3. Как в битрикс включить вывод ошибок?
  4. Методы выявление ошибки
  5. Основные причины появления белого экрана

Почему может появиться это уведомление?

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

Теперь рассмотрим пути решения этой проблемы.

Что делать, если появляется сообщение «при выполнении скрипта возникла ошибка»?

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

Как в битрикс включить вывод ошибок?

Для старого ядра включить вывод ошибок можно в файле dbconn.php:

Чтобы в битрикс включить вывод ошибок для нового ядра D7 необходимо в файле .settings.php поставить значение debug => true:

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

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

Порой на сайте разработанном на 1с Битрикс вместо контента появляется белый экран. Были случаи появления чистого экрана после авторизации в админке.

Методы выявление ошибки

1. В файле .htaccess включаем вывод ошибок:

2. В файле /bitrix/php_interface/dbconn.php :

3. Смотреть лог ошибок (error log) веб-сервера (апач, файл error_log ).

4. В файле /bitrix/.settings.php установить

5. Проверить содержимое переменной $_SERVER[«DOCUMENT_ROOT»] . Там должен быть установлен корректный путь, иначе не подключаются файлы системы.

6. Запустить скрипт проверки системы на соответствия требованиям для стабильной работы 1с Битрикс bitrix_server_test.php

Основные причины появления белого экрана

  1. Кривое редактирование /bitrix/php_interface/init.php : ошибки, лишний пробел после ?>
  2. Такая же проблема с белым экраном возникла после переноса на другой сервер.
  3. Проверить настройку PHP — short_open_tag , которая должна быть в On.
  4. Не хватает оперативной памяти( memory_limit по умолчанию 128). Проблема решается следующим образом. Заходим в /bitrix/php_interface/dbconn.php . Редактируем ini_set(«memory_limit», «512M»);

Если вы сталкивались с этой проблемой пишите в комментариях, как её решили.

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

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

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

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

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

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

E_DEPRECATED,

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

Понравилась статья? Поделить с друзьями:
  • Recoverable read error
  • React must be in scope when using jsx как исправить
  • React error from chokidar
  • Rdp error 3334
  • Rbuz d2 40 ошибка rep