Error status битрикс

Как генерировать ошибку внутри метода *Action?Я пытаюсь выбросить Exception, но status все равно success. Почему?Код public function sendMessageAction(): string {     $i = 0;     try {         if ($i === 0) {             throw new Exception('Ошибка');         }     } catch (Exception $e) {...
 

Пользователь 967447

Постоянный посетитель

Сообщений: 107
Баллов: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 22.02.2017

#1

1

29.08.2019 16:17:35

Как генерировать ошибку внутри метода *Action?
Я пытаюсь выбросить Exception, но status все равно success. Почему?

Код
public function sendMessageAction(): string
{
    $i = 0;
    try {
        if ($i === 0) {
            throw new Exception('Ошибка');
        }
    } catch (Exception $e) {
        return (string) $e->getMessage(); // status: success
    }
}
 

Пользователь 136059

Гуру

Сообщений: 5418
Баллов: 636
Авторитет:

22

Рейтинг пользователя:

0

Регистрация: 16.07.2012

#2

1

29.08.2019 18:33:27

Цитата
LemonTree написал:
public function sendMessageAction(): string
{
   $i = 0;
   throw new Exception(‘Ошибка’);
}

Голосуй за идеи по развитию API Bitrix:
https://idea.1c-bitrix.ru/26707/
https://idea.1c-bitrix.ru/26709/
https://idea.1c-bitrix.ru/the-local-extension-folder-js/

 

Пользователь 967447

Постоянный посетитель

Сообщений: 107
Баллов: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 22.02.2017

#3

0

30.08.2019 11:01:45

Это работает, но в этом случае я не могу получить response. Как обработать сгенерированную ошибку?

Код
BX.ajax.runComponentAction('custom:custom',
    'sendMessage', {
        mode: 'class',
    })
    .then(function(response) {
        console.log(response); // Это недосягаемо
    });
 

Пользователь 967447

Постоянный посетитель

Сообщений: 107
Баллов: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 22.02.2017

#4

0

30.08.2019 11:33:54

Роман Грицук

дал ответ:

Код
BX.ajax.runComponentAction('custom:custom',
    'sendMessage', {
        mode: 'class',
    })
    .then(
      function(response) {
          //
      },
      function(response) {
          //в случае ошибки, будет вызван этот обработчик
      }
    );
 

Пользователь 180446

Эксперт

Сообщений: 684
Баллов: 92
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 11.04.2013

#5

0

30.08.2019 11:35:50

Цитата
LemonTree написал:
не могу обработать response

Почему? И что это вообще значит?

Вам принципиально делать запрос именно в class.php?
Если поменять mode на ajax — всё будет чуть проще.

 

Пользователь 967447

Постоянный посетитель

Сообщений: 107
Баллов: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 22.02.2017

#6

0

30.08.2019 11:44:35

Цитата
И что это вообще значит?

Нужно вывести пользователю ошибки заполнения формы. Ошибки возвращает SOAP сервис.

Цитата
Почему?

Потому что throw выбрасывает исключение.

 

Пользователь 180446

Эксперт

Сообщений: 684
Баллов: 92
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 11.04.2013

#7

2

30.08.2019 13:42:34

Всмысле нужно вернуть ошибку?
Тогда исключения не нужны.

Пробуй так

Код
use BitrixMainEngineResponseAjaxJson;
use BitrixMainError;
use BitrixMainErrorCollection;

....

$error = new Error('Ошибка');
$errorCollection = new ErrorCollection([$error]);
return AjaxJson::createError( $errorCollection );

или можно так

Код
use BitrixMainEngineResponseAjaxJson;
use BitrixMainError;
use BitrixMainResult;

....


$result = new Result();
$result->addError( new Error( 'Ошибка' ) );
return AjaxJson::createError( $result->getErrorCollection() );
 

Пользователь 967447

Постоянный посетитель

Сообщений: 107
Баллов: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 22.02.2017

#8

0

31.08.2019 10:28:34

Цитата
Александр Медведев написал:
Пробуй так

Круто! То, что нужно! Второй callback, правда, все равно пришлось использовать.

 

Пользователь 180446

Эксперт

Сообщений: 684
Баллов: 92
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 11.04.2013

#9

0

31.08.2019 10:40:39

Цитата
LemonTree написал:
Второй callback, правда, все равно пришлось использовать

Что такое второй callback?

 

Пользователь 967447

Постоянный посетитель

Сообщений: 107
Баллов: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 22.02.2017

#10

0

31.08.2019 11:08:20

Скрытый текст

 

Пользователь 180446

Эксперт

Сообщений: 684
Баллов: 92
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 11.04.2013

#11

2

31.08.2019 16:13:43

Ну это не совсем callback.

Так по моему нагляднее будет

Код
BX.ajax.runComponentAction('custom:custom',
  'sendMessage', {
    mode: 'class',
  })
  .then((response) => {

  })
  .catch((response) => {

  });
 

Пользователь 967447

Постоянный посетитель

Сообщений: 107
Баллов: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 22.02.2017

#12

0

31.08.2019 20:34:28

Цитата
Александр Медведев написал:
Так по моему нагляднее будет

Вообще красиво теперь! Спасибо.

Содержание

  1. RTFM.WIKI
  2. Инструменты пользователя
  3. Инструменты сайта
  4. Содержание
  5. Bitrix — коллекция ошибок
  6. Mysql query error: (1227)
  7. Ошибка в типе содержимого
  8. Ошибка сокетов в site_checker
  9. Не меняется memory_limit
  10. DB query error. Please try later
  11. SendError
  12. Описание и параметры
  13. Параметры функции
  14. Примеры использования
  15. Пользовательские комментарии
  16. html код системных сообщений
  17. Обработка ошибок в Битрикс
  18. Модули АХТУНГ 500 И АХТУНГ 500 ПРО
  19. SendError
  20. Описание и параметры
  21. Параметры функции
  22. Примеры использования
  23. Пользовательские комментарии

RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта

Содержание

Bitrix — коллекция ошибок

Mysql query error: (1227)

Ошибка в типе содержимого

Добавить в htaccess

или добавить в bitrix/php_interface/init.php (или dbconf.php )

Ошибка сокетов в site_checker

Причин много (корявый hosts файл, нет модуля sockets итд).

Но оказывается всё из-за того, что на /bitrix/admin/ установлен htpasswd (логин/пароль).

Браво Битрикс! Райская система. Всем рекомендую.

Не меняется memory_limit

Ещё одна дикая проблема Битрикса. Тому кто это придумал надо пожать руку, а потом оторвать её.

Не меняется memory_limit для PHP. Меняю в php.ini, меняю в htaccess, меняю где только можно, а результата нет. Смотрю phpinfo там правильный и master value и local value.

Не первый день в айти. Надо просто копнуть глубже

Какой-то сверх мозг в этой шайтан конторе решил, что будет весело прибить memory_limit гвоздями, потом полить супер-клеем и ещё сверху залить бетоном всё это дело. Ха-ха-ха, !@#$% смешно.

Вот почему у меня парсер в админке не работал. Из-за 128M memory_limit. Даже не знаю какой мемчик бы подошёл для этой ситуации лучше — Друзь с его вы там ох!@#$% или Винни Пух ныряющий в болото. Битрикс💩, а WordPress, Joomla, Drupal по сравнению с этим платным💩 просто топчик.

DB query error. Please try later

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

Обновляем страницу сайта, чтобы увидеть в чем проблема.

Источник

SendError

Описание и параметры

Отсылает по E-Mail сообщение об ошибке.

Для работы функции необходимо, чтобы до ее вызова была определена константа ERROR_EMAIL, содержащая E-Mail адрес на который будут отправляться сообщения об ошибках. Если эта константа не определена, то функция не выполняет никаких действий. Константа ERROR_EMAIL при необходимости определяется в начале текущей страницы или в одном из файлов:

  • /bitrix/php_interface/dbconn.php
  • /bitrix/php_interface/ID сайта/init.php

В константе ERROR_EMAIL может быть определено несколько адресов, на которые отсылать сообщения:

Помимо текста ошибки, в письмо будут включены:

  • HTTP_GET_VARS — массив переменных пришедших на страницу в HTTP запросе типа GET
  • HTTP_POST_VARS — массив переменных пришедших на страницу в HTTP запросе типа POST
  • HTTP_COOKIE_VARS — массив переменных хранящихся у посетителя на локальной машине (cookie)
  • HTTP_SERVER_VARS — массив стандартных серверных переменных

Для корректной отправки сообщений об ошибке необходимо также определять константы:
ERROR_EMAIL_FROM,
ERROR_EMAIL_REPLY_TO.

Параметры функции

Параметр Описание
text Текст сообщения.
module_id Идентификатор модуля, который сохраняет сообщение.
Необязательный параметр, по умолчанию — «».

Примеры использования

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

html код системных сообщений

Здравствуйте, умные люди.

Где собственно лежит html/css код системных сообщений?

К сожалению, на ваш поисковый запрос ничего не найдено.

Для просмотра списка заказов необходимо авторизоваться.

Спасибо за ответы

А у компонента system.auth.authorize есть файл component.php и template.php ну и языковых два.

В языковых текста нет.
А в template.php выводят этот html следующие строчки.

Где же всетаки этот код хранится и описания стилей для него?

В функции ShowMessage вызывается компонент bitrix:system.show_message, как-то так:

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

Спасибо, Сергей за Ваш ответ.

Как для всего сайта разобрался, копируем так:
bitrixtemplatesшаблон_сайтаcomponentsbitrixsystem.show_message.default

А как, если я хочу только в этом компоненте не совсем..

К примеру я хочу чтобы эти сообщения отличались по оформлению только в компоненте system.auth.authorize, там две строчки вызова:

Куда девать параметры функции в этих строчках при вставке в приведенный Вами код вызова?

Александр, выше все уже понятно, классы описаны в шаблоне компонента bitrix:system.show_message

Переопределить стиль конечно можно, как в главном css шаблона, непосредственно в шаблоне system.auth.authorize либо его css файле, но переопределение работает только с !important , да и вообще «переопределять» стили да еще и с !important — не совсем правильно. И особенно это не правильно если имеется предусмотренный в системе способ не делать это через одно место

Источник

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

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

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

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

  • log — секция с указанием логгера. Если пусто, то запись ошибок происходить не будет. В данном случае по умолчанию всю работу на себя возьмет объект класса BitrixMainDiagFileExceptionHandlerLog.
  • settings — секция с настройками обработчика ошибок. Можно задавать произвольные параметры. Они все передадутся массивом в метод initialize() обработчика.
  • file — относительный путь к файлу логов от корневой директории сайта (BitrixMainApplication::getDocumentRoot().’/’.$file).
  • log_size — максимальный размер файла логов в байтах.

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

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

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

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

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

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

Источник

SendError

Описание и параметры

Отсылает по E-Mail сообщение об ошибке.

Для работы функции необходимо, чтобы до ее вызова была определена константа ERROR_EMAIL, содержащая E-Mail адрес на который будут отправляться сообщения об ошибках. Если эта константа не определена, то функция не выполняет никаких действий. Константа ERROR_EMAIL при необходимости определяется в начале текущей страницы или в одном из файлов:

  • /bitrix/php_interface/dbconn.php
  • /bitrix/php_interface/ID сайта/init.php

В константе ERROR_EMAIL может быть определено несколько адресов, на которые отсылать сообщения:

Помимо текста ошибки, в письмо будут включены:

  • HTTP_GET_VARS — массив переменных пришедших на страницу в HTTP запросе типа GET
  • HTTP_POST_VARS — массив переменных пришедших на страницу в HTTP запросе типа POST
  • HTTP_COOKIE_VARS — массив переменных хранящихся у посетителя на локальной машине (cookie)
  • HTTP_SERVER_VARS — массив стандартных серверных переменных

Для корректной отправки сообщений об ошибке необходимо также определять константы:
ERROR_EMAIL_FROM,
ERROR_EMAIL_REPLY_TO.

Параметры функции

Параметр Описание
text Текст сообщения.
module_id Идентификатор модуля, который сохраняет сообщение.
Необязательный параметр, по умолчанию — «».

Примеры использования

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

Контроллеры — это часть MVC архитектуры, которая отвечает за обработку запроса и генерирование ответа. Сразу оговоримся, что дальше речь пойдет про компоненты-контроллеры в контексте Bitrix Framework.

Битрикс-контроллер принимает от клиента запрос и возвращает JSON с результатом или ошибкой. Классы-контроллеры содержат одно или несколько методов-действий и являются надстройкой над обычными компонентами, поэтому их нужно размещать в файле class.php компонента.

Бекенд

Тут все просто: в компоненте нужно реализовать интерфейс Controllerable, в ктором есть метод configureActions(). Этот метод возвращает массив с действиями которые можно вызвать. Например, для действия send нужно будет создать метод sendAction.

Метод-действие возвращает массив, который затем отдается клиенту в виде JSON.

Если требуется отдавать на сторону клиента ошибки, то нужно реализовать интерфейс Errorable, в котором есть методы getErrors() и getErrorByCode(). Также нужно будет реализовать коллекцию ошибок ErrorCollection, ее удобнее всего создать в методе onPrepareComponentParams().

В качестве простого примера создадим контроллер для формы обратной связи. Компонент пусть называется machaon:feedback, код контроллера разместится в файле /local/components/machaon/feedback/class.php.

<?php
//local/components/machaon/feedback/class.php

namespace MachaonComponents;

use BitrixMainError;
use BitrixMainErrorable;
use BitrixMainErrorCollection;
use BitrixMainEngineActionFilter;
use BitrixMainEngineContractControllerable;
use CBitrixComponent;

class FeedbackComponent extends CBitrixComponent implements Controllerable, Errorable
{
    protected ErrorCollection $errorCollection;

    public function onPrepareComponentParams($arParams)
    {
        $this->errorCollection = new ErrorCollection();
        return $arParams;
    }

    public function executeComponent()
    {
        // Метод не будет вызван при ajax запросе
    }

    public function getErrors(): array
    {
        return $this->errorCollection->toArray();
    }

    public function getErrorByCode($code): Error
    {
        return $this->errorCollection->getErrorByCode($code);
    }

    // Описываем действия
    public function configureActions(): array
    {
        return [
            'send' => [
                'prefilters' => [
                    // здесь указываются опциональные фильтры, например:
                    new ActionFilterAuthentication(), // проверяет авторизован ли пользователь
                ]
            ]
        ];
    }

    // Сюда передаются параметры из ajax запроса, навания точно такие же как и при отправке запроса.
    // $_REQUEST['username'] будет передан в $username, $_REQUEST['email'] будет передан в $email и т.д.
    public function sendAction(string $username = '', string $email = '', string $message = ''): array
    {
        try {
            $this->doSomeWork();
            return [
                "result" => "Ваше сообщение принято",
            ];
        } catch (ExceptionsEmptyEmail $e) {
            $this->errorCollection[] = new Error($e->getMessage());
            return [
                "result" => "Произошла ошибка",
            ];
        }
    }
}

Фронтенд

В js-библиотеке Битрикс уже есть функция для отправки запросов. Далее простой пример, где machaon:feedback это имя компонента, send — имя действия, а в data: {} передаются необходимые данные:

BX.ajax.runComponentAction("machaon:feedback", "send", {
    mode: "class",
    data: {
        "email": "vasya@email.tld",
        "username": "Василий",
        "message": "Где мой заказ? Жду уже целый час!"
    }
}).then(function (response) {
    // обработка ответа
});

Если все хорошо, с бэкенда нам вернется:

{
    "status": "success",
    "data": {
        "result": "Письмо отправлено"
    },
    "errors": []
}

Либо сообщение об ошибке:

{
    "status": "error",
    "data": {
        "result": "Произошла ошибка"
    },
    "errors": [{
        "message": "Не заполено поле Email",
        "code": 0,
        "customData": null
    }]
}

Отправка запроса напрямую

Если не хочется использовать BX.ajax.runComponentAction(), можно отправить запрос напрямую, например используя jQuery. Нужно отправить запрос на /bitrix/services/main/ajax.php, он будет выглядеть примерно так:

$.post(
    "/bitrix/services/main/ajax.php?mode=class&c=machaon:feedback&action=send",
    {
        "email": "vasya@email.tld",
        "username": "Василий",
        "message": "Где мой заказ? Жду уже целый час!"
    },
    function (response) {
        console.log(response);
    }
);

В параметре mode передается обязательное значение class, в c передается имя компонента в формате vendor:component, action это запускаемый метод.

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

email, username и message станут затем параметрами $email, $username и $message в методе sendAction().

Использование ЧПУ

Также можно в urlrewrite.php прописать красивый адрес, например /api/rest-component/<component_vendor>/<component_name>/<action>/.

Для этого добавим в urlrewrite.php следующий массив:

$arUrlRewrite = [
    // ...
    [
        "CONDITION" => "#^/api/rest-component/([a-zA-Z0-9]+)/([a-zA-Z0-9.]+)/([a-zA-Z0-9]+)/?.*#",
        "RULE" => "mode=class&c=$1:$2&action=$3",
        "PATH" => "/bitrix/services/main/ajax.php",
    ],
];

Тогда запрос будет выглядеть понятнее:

function sendFeedback(form) {
    const route = "/api/rest-component/machaon/feedback/send/";
    const data = $(form).serialize();
    $.post(route, data, function (response) {
        console.log(response);
    });
}

Нюансы

Если в configureActions() оставить пустой массив prefilters, то метод-действие будет работать без фильтров.

Но если не указывать ключ prefilters, то будут применены фильтры по умолчанию — ActionFilterAuthentication и ActionFilterCsrf.

public function configureActions(): array
{
    return [
        'send' => [
            'prefilters' => [] // метод sendAction() будет работать без фильтров
        ]
    ];
}
public function configureActions(): array
{
    return [
        'send' => []  // метод sendAction() будет работать у авторизованных пользователей, которые передали CSRF-токен
    ];
}

Пример ошибки когда пользователь не авторизован и не передал токен:

{
  "status": "error",
  "data": null,
  "errors": [
    {
      "message": "Необходимо авторизоваться на сайте",
      "code": "invalid_authentication",
      "customData": null
    },
    {
      "message": "Invalid csrf token",
      "code": "invalid_csrf",
      "customData": {
        "csrf": "dc8adda3ac983217623cf1196dfc5c61"
      }
    }
  ]
}

Если требуется CSRF-защита, то для фильтра BitrixMainEngineActionFilterCsrf нужно передать идентификатор сессии в параметре sessid.

На бэкенде его можно получить функцией bitrix_sessid(), на фронтенде — BX.bitrix_sessid().

При использовании BX.ajax.runComponentAction() сессия передается автоматически.

Другие фильтры можно посмотреть в документации

Открытые члены

  __construct ($message, $code=»», $status=0, Exception $previous=null)
 
  getErrorCode ()
 
  setErrorCode ($error_code)
 
  getStatus ()
 
  setStatus ($status)
 
  setMessage ($msg)
 
  getAdditional ()
 
  setAdditional ($error_additional)
 
  setApplicationException (CApplicationException $ex)
 

Поля данных

const  ERROR_INTERNAL_WRONG_TRANSPORT = ‘INTERNAL_WRONG_TRANSPORT’
 
const  ERROR_INTERNAL_WRONG_HANDLER_CLASS = ‘INTERNAL_WRONG_HANDLER_CLASS’
 
const  ERROR_INTERNAL_WRONG_FILE_HANDLER = ‘INTERNAL_WRONG_FILE_HANDLER’
 
const  ERROR_INTERNAL_PORTAL_DELETED = ‘PORTAL_DELETED’
 
const  ERROR_OAUTH = ‘ERROR_OAUTH’
 
const  ERROR_METHOD_NOT_FOUND = ‘ERROR_METHOD_NOT_FOUND’
 
const  ERROR_OPERATION_TIME_LIMIT = ‘OPERATION_TIME_LIMIT’
 
const  ERROR_CORE = ‘ERROR_CORE’
 
const  ERROR_ARGUMENT = ‘ERROR_ARGUMENT’
 
const  ERROR_NOT_FOUND = ‘ERROR_NOT_FOUND’
 

Защищенные данные

  $status
 
  $error_code
 
  $error_additional = array()
 

См. определение в файле restexception.php строка 4

◆ __construct()

__construct (   $message,
  $code = "",
  $status = 0,
Exception  $previous = null 
)

См. определение в файле restexception.php строка 23

24 {

26 $this->error_code = $code;

27 parent::__construct($message, intval($code), $previous);

28 }

◆ getAdditional()

◆ getErrorCode()

◆ getStatus()

◆ initFromException()

static initFromException ( Exception  $e )
static

См. определение в файле restexception.php строка 80

81 {

82 $ex = null;

83

84 if (is_a($e, ‘BitrixMainDBSqlException’))

85 {

86 $ex = new self(

87 «SQL query error!»,

89 CRestServer::STATUS_INTERNAL,

90 $e->getPrevious()

91 );

92 }

93 elseif(is_a($e, ‘BitrixMainSystemException’))

94 {

95 if(is_a($e, ‘BitrixMainArgumentException’))

96 {

97 $ex = new self(

98 $e->getMessage(),

100 CRestServer::STATUS_WRONG_REQUEST,

101 $e->getPrevious()

102 );

103

104 $ex->setAdditional(array(

105 «argument» => $e->getParameter(),

106 ));

107 }

108 }

109

110 if(!$ex)

111 {

112 $ex = new self(

113 $e->getMessage(),

115 CRestServer::STATUS_WRONG_REQUEST,

116 $e->getPrevious()

117 );

118 }

119

120 return $ex;

121 }

◆ setAdditional()

setAdditional (   $error_additional )

◆ setApplicationException()

setApplicationException ( CApplicationException  $ex )

См. определение в файле restexception.php строка 66

67 {

68 if($ex->getId())

69 {

71 }

72 else

73 {

75 }

76

77 $this->message = $ex->getString();

78 }

setErrorCode($error_code)

◆ setErrorCode()

setErrorCode (   $error_code )

◆ setMessage()

◆ setStatus()

◆ $error_additional

$error_additional = array()

protected

◆ $error_code

◆ $status

◆ ERROR_ARGUMENT

const ERROR_ARGUMENT = ‘ERROR_ARGUMENT’

◆ ERROR_CORE

const ERROR_CORE = ‘ERROR_CORE’

◆ ERROR_INTERNAL_PORTAL_DELETED

const ERROR_INTERNAL_PORTAL_DELETED = ‘PORTAL_DELETED’

◆ ERROR_INTERNAL_WRONG_FILE_HANDLER

const ERROR_INTERNAL_WRONG_FILE_HANDLER = ‘INTERNAL_WRONG_FILE_HANDLER’

◆ ERROR_INTERNAL_WRONG_HANDLER_CLASS

const ERROR_INTERNAL_WRONG_HANDLER_CLASS = ‘INTERNAL_WRONG_HANDLER_CLASS’

◆ ERROR_INTERNAL_WRONG_TRANSPORT

const ERROR_INTERNAL_WRONG_TRANSPORT = ‘INTERNAL_WRONG_TRANSPORT’

◆ ERROR_METHOD_NOT_FOUND

const ERROR_METHOD_NOT_FOUND = ‘ERROR_METHOD_NOT_FOUND’

◆ ERROR_NOT_FOUND

const ERROR_NOT_FOUND = ‘ERROR_NOT_FOUND’

◆ ERROR_OAUTH

const ERROR_OAUTH = ‘ERROR_OAUTH’

◆ ERROR_OPERATION_TIME_LIMIT

const ERROR_OPERATION_TIME_LIMIT = ‘OPERATION_TIME_LIMIT’


Объявления и описания членов класса находятся в файле:

  • C:/Bitrix/modules/rest/lib/restexception.php

Содержание

Mysql query error: (1227)

Ошибка

Mysql query error: (1227) Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation (400)

Решение

GRANT SESSION_VARIABLES_ADMIN ON *.* TO 'bitrix_user'@'localhost';

Ошибка в типе содержимого

ERR_CONTENT_DECODING_FAILED

Добавить в htaccess

zlib.output_compression = on

или добавить в bitrix/php_interface/init.php (или dbconf.php)

define('BX_COMPRESSION_DISABLED',true);

Ошибка сокетов в site_checker

Причин много (корявый hosts файл, нет модуля sockets итд).

Но оказывается всё из-за того, что на /bitrix/admin/ установлен htpasswd (логин/пароль).

Браво Битрикс! Райская система. Всем рекомендую.

Не меняется memory_limit

Ещё одна дикая проблема Битрикса. Тому кто это придумал надо пожать руку, а потом оторвать её.

Не меняется memory_limit для PHP. Меняю в php.ini, меняю в htaccess, меняю где только можно, а результата нет. Смотрю phpinfo там правильный и master value и local value.

Не первый день в айти. Надо просто копнуть глубже

# grep -r --include=*.php "memory_limit" /var/www/foobar.com/

Какой-то сверх мозг в этой шайтан конторе решил, что будет весело прибить memory_limit гвоздями, потом полить супер-клеем и ещё сверху залить бетоном всё это дело. Ха-ха-ха, !@#$% смешно.

/var/www/foobar/bitrix/modules/main/admin/site_checker.php:                  @ini_set("memory_limit", "512M");
/var/www/foobar/bitrix/modules/main/classes/general/file.php:                        $memoryLimit = CUtil::Unformat(ini_get('memory_limit'));
/var/www/foobar/bitrix/modules/main/classes/general/site_checker.php:                        array('check_memory_limit' => GetMessage('SC_T_MEMORY')),
/var/www/foobar/bitrix/modules/main/classes/general/site_checker.php:        function check_memory_limit()
/var/www/foobar/bitrix/modules/main/classes/general/site_checker.php:                        $cur = ini_get('memory_limit');
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:               $memoryLimit = WelcomeStep::unformat(ini_get('memory_limit'));
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                       $memoryLimit = WelcomeStep::unformat(get_cfg_var('memory_limit'));
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                       @ini_set("memory_limit", "64M");
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                       $memoryLimit = WelcomeStep::unformat(ini_get('memory_limit'));
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                                       '.($memoryLimit > 0 && $memoryLimit < $this->memoryMin*1048576 ? $this->ShowResult(ini_get('memory_limit'), "ERROR") : $this->ShowResult(ini_get('memory_limit'), "OK")).'
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                       $fileContent .= "n@ini_set("memory_limit", "1024M");n";
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                       $memoryLimit = WelcomeStep::unformat(ini_get('memory_limit'));
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                               $memoryLimit = WelcomeStep::unformat(get_cfg_var('memory_limit'));
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                               @ini_set("memory_limit", "512M");
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                               $memoryLimit = WelcomeStep::unformat(ini_get('memory_limit'));
/var/www/foobar/bitrix/modules/main/install/wizard/wizard.php:                                       $fileContent .= "n@ini_set("memory_limit", "512M");n";
/var/www/foobar/bitrix/modules/main/lang/en/admin/site_checker.php:PHP defines the memory limit in php.ini by setting the <b>memory_limit</b> parameter. However, this may be overridden on shared hostings. You should not trust this parameter.
/var/www/foobar/bitrix/modules/main/lang/en/admin/site_checker.php:The test attempts to increase the value of <b>memory_limit</b> using the code:
/var/www/foobar/bitrix/modules/main/lang/en/admin/site_checker.php:<code>ini_set(&quot;memory_limit&quot;, &quot;512M&quot;)
/var/www/foobar/bitrix/modules/main/lang/en/admin/site_checker.php:$MESS["SC_MEMORY_CHANGED"] = "The value of memory_limit was increased from #VAL0# to #VAL1# using ini_set while testing.";
/var/www/foobar/bitrix/modules/main/lang/ru/admin/site_checker.php:$MESS["SC_MEMORY_CHANGED"] = "Значение memory_limit было увеличено с #VAL0# до #VAL1# на момент тестирования через ini_set.";
/var/www/foobar/bitrix/modules/main/lang/ru/admin/site_checker.php:Основной параметр ограничения памяти в php.ini - это <b>memory_limit</b>. Но доверять значению параметра нельзя, т.к. на хостингах могут быть установлены дополнительные ограничения памяти.
/var/www/foobar/bitrix/modules/main/lang/ru/admin/site_checker.php:Обратите внимание, тест пытается увеличить значение <b>memory_limit</b> используя код:
/var/www/foobar/bitrix/modules/main/lang/ru/admin/site_checker.php:<code>ini_set(&quot;memory_limit&quot;, &quot;512M&quot;)
/var/www/foobar/bitrix/php_interface/dbconn.php:@ini_set("memory_limit", "128M");
/var/www/foobar/cli/parse_list.php:ini_set('memory_limit', '2048M');
/var/www/foobar/local/php_interface/dbconn.example.php:@ini_set("memory_limit", "128M");

Вот почему у меня парсер в админке не работал. Из-за 128M memory_limit. Даже не знаю какой мемчик бы подошёл для этой ситуации лучше — Друзь с его вы там ох!@#$% или Винни Пух ныряющий в болото. Битрикс💩, а WordPress, Joomla, Drupal по сравнению с этим платным💩 просто топчик.

DB query error. Please try later

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

$DBDebug = true;

Обновляем страницу сайта, чтобы увидеть в чем проблема.

The script encountered an error

The script encountered an error and will be aborted. To view extended error messages, enable this feature in .settings.php.

Установить ‘debug’ ⇒ true в bitrix/.settings.php (в старых версиях bitrix/php_interface/dbconn.php).

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Создаем файл /404.php, проверяем директивы .htaccess, выполняем настройку главного модуля и компонентов.

Введение

Страница 404-й ошибки должна загружаться в том случае, если
человек попытался открыть несуществующую страницу. Увидев сообщение «Страница
не найдена» пользователь поймет, что ошибся при вводе адреса, либо перешел по
нерабочей ссылке.

Но по нерабочей ссылке может перейти не только человек, но и
робот поисковой системы. Поэтому, кроме текстового сообщения об ошибке, страница
должна отдавать HTTP-код
404 – так поисковики понимают, что они попытались попасть на несуществующую
страницу. Разберемся, как создать страницу 404-й ошибки на сайте, который
работает  на системе управления
1С-Битрикс.

Создаем страницу /404.php

Для начала создаем в корне сайта файл 404.php со следующим кодом:

<?php
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetPageProperty("not_show_nav_chain", "Y");
$APPLICATION->SetTitle("Ошибка 404");
?>
<p>Страница не найдена. Она либо была удалена, либо вообще никогда не существовала. Возможно Вы ошиблись при вводе адреса, воспользуйтесь главным меню.</p>
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Если в корне сайта этот файл уже существует, проверяем, чтобы в самом начале были эти три строчки, они важны, если их нет – добавляем:

<?php include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");?>

Если интересно разобраться — отдельно рассмотрим каждую строчку нашего файла:

include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');

— подключаем систему обработки адресов Битрикса, чтобы корректно обрабатывать адреса динамических разделов (статей, новостей, каталогов).

CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");

— устанавливаем HTTP-статус  404, благодаря этим строчкам поисковики поймут, что запрашиваемой страницы не существует.

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

— подключаем шапку сайта.

$APPLICATION->SetPageProperty("not_show_nav_chain", "Y");

— отключаем отображение цепочки навигации (хлебных крошек) на этой странице.

$APPLICATION->SetTitle("Ошибка 404");

— устанавливаем h1 и title страницы.

<p>Страница не найдена. Она либо была удалена, либо вообще никогда не существовала. Возможно Вы ошиблись при вводе адреса, воспользуйтесь главным меню.</p>

— контент страницы, его можете отредактировать на своё усмотрение.

<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

— подключаем подвал сайта.

Окей, страничку создали, идем дальше.

Проверяем наличие директивы в .htaccess

Открываем файл .htaccess в корне сайта, проверяем, что там есть такая строчка:

ErrorDocument 404 /404.php

Эта строчка есть в .htaccess сайтов на Битриксе по-умолчанию, но всё-равно лучше проверить. Если ее нет – добавляем. Этим мы указываем, что созданный нами файл /404.php должен загружаться при попытке открыть несуществующую страницу.

Проверяем настройки главного модуля

В админке идем в настройки Главного модуля (Настройки => Настройки продукта => Настройки модулей => Главный модуль) и проверяем, чтобы опция Посылать в заголовке статус 200 на 404 ошибку была отключена:

Опция Посылать в заголовке статус 200 на 404 ошибку

По названию опции понятно: если галочка стоит – страница с 404-й ошибкой будет возвращать статус 200, а это нам ни к чему. Поэтому если галочка стоит – убираем её.

Настраиваем компоненты

В настройках всех компонентов, которые отвечают за страницы
детального просмотра, нужно настроить режим обработки 404-й ошибки. Например,
это могут быть компоненты «Новости», «Каталог», «Новость детально», «Элемент
каталога детально» — одним словом все компоненты, которые генерируют страницы
детального просмотра.

Тут без конкретного примера не обойтись, поэтому рассмотрим следующую
ситуацию: на сайте есть раздел «Новости», страница детального просмотра
новостей генерируется компонентом «Новость детально». Урлы новостей выглядят
следующим образом /news/simvolnyj-kod-novosti/

Если мы перейдем в настройки данного компонента — в самом
низу увидим блок Настройки 404 ошибки.
По-умолчанию он выглядит вот так:

Настройки компонента по-умолчанию

Т.е. обработка 404-й ошибки не настроена. Если мы попытаемся открыть страницу с несуществующей новостью, например /news/asdfgffj4/ — получим вот такое стандартное сообщение:

Страница с ошибкой, но не 404

Сама страничка отдает HTTP-код 200. Так быть не должно, срочно исправляем! В настройках компонента отмечаем галочки Устанавливать статус 404 и Показ специальной страницы, поле Страница для показа не заполняем, т.к. по умолчанию это страница /404.php – т.е. то, что нам нужно. Блок настроек компонента теперь выглядит следующим образом:

Вносим изменения в настройки компонента

Теперь при попытке открыть несуществующую новость получаем нашу страницу 404:

Нормальная страница 404-й ошибки

Проверяем результат работы

Мы всё настроили, остается проверить, отдает ли наш сайт код
404 для несуществующих страниц. Для таких целей можно использовать сервис
яндекса https://webmaster.yandex.ru/tools/server-response/

Указываем ему любую несуществующую страницу нашего сайта и
получаем ответ:

Проверяем результат работы

Если Код статуса HTTP равен 404 Not Found — поздравляю, вы всё сделали правильно.

Теперь вы знаете, как настроить страницу-обработчик 404-й ошибки в Битриксе :)

Понравилась статья? Поделить с друзьями:
  • Error status unknown storage type 0xc0040009
  • Error status unknown storage section type 0xc003000c
  • Error status too large 0xc0040004
  • Error status stor life exhaust 0xc003001d
  • Error status stop life exhaust 0xc003001d