Пользователь 967447 Постоянный посетитель Сообщений: 107 |
#1 1 29.08.2019 16:17:35 Как генерировать ошибку внутри метода *Action?
|
||
Пользователь 136059 Гуру Сообщений: 5418 |
#2 1 29.08.2019 18:33:27
Голосуй за идеи по развитию API Bitrix: |
||
Пользователь 967447 Постоянный посетитель Сообщений: 107 |
#3 0 30.08.2019 11:01:45 Это работает, но в этом случае я не могу получить response. Как обработать сгенерированную ошибку?
|
||
Пользователь 967447 Постоянный посетитель Сообщений: 107 |
#4 0 30.08.2019 11:33:54 Роман Грицук
дал ответ:
|
||
Пользователь 180446 Эксперт Сообщений: 684 |
#5 0 30.08.2019 11:35:50
Почему? И что это вообще значит? Вам принципиально делать запрос именно в class.php? |
||
Пользователь 967447 Постоянный посетитель Сообщений: 107 |
#6 0 30.08.2019 11:44:35
Нужно вывести пользователю ошибки заполнения формы. Ошибки возвращает SOAP сервис.
Потому что throw выбрасывает исключение. |
||||
Пользователь 180446 Эксперт Сообщений: 684 |
#7 2 30.08.2019 13:42:34 Всмысле нужно вернуть ошибку? Пробуй так
или можно так
|
||||
Пользователь 967447 Постоянный посетитель Сообщений: 107 |
#8 0 31.08.2019 10:28:34
Круто! То, что нужно! Второй callback, правда, все равно пришлось использовать. |
||
Пользователь 180446 Эксперт Сообщений: 684 |
#9 0 31.08.2019 10:40:39
Что такое второй callback? |
||
Пользователь 967447 Постоянный посетитель Сообщений: 107 |
#10 0 31.08.2019 11:08:20
|
|
Пользователь 180446 Эксперт Сообщений: 684 |
#11 2 31.08.2019 16:13:43 Ну это не совсем callback. Так по моему нагляднее будет
|
||
Пользователь 967447 Постоянный посетитель Сообщений: 107 |
#12 0 31.08.2019 20:34:28
Вообще красиво теперь! Спасибо. |
||
Содержание
- RTFM.WIKI
- Инструменты пользователя
- Инструменты сайта
- Содержание
- Bitrix — коллекция ошибок
- Mysql query error: (1227)
- Ошибка в типе содержимого
- Ошибка сокетов в site_checker
- Не меняется memory_limit
- DB query error. Please try later
- SendError
- Описание и параметры
- Параметры функции
- Примеры использования
- Пользовательские комментарии
- html код системных сообщений
- Обработка ошибок в Битрикс
- Модули АХТУНГ 500 И АХТУНГ 500 ПРО
- SendError
- Описание и параметры
- Параметры функции
- Примеры использования
- Пользовательские комментарии
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 |
См. определение в файле 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("memory_limit", "512M") /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("memory_limit", "512M") /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 ошибку была отключена:
По названию опции понятно: если галочка стоит – страница с 404-й ошибкой будет возвращать статус 200, а это нам ни к чему. Поэтому если галочка стоит – убираем её.
Настраиваем компоненты
В настройках всех компонентов, которые отвечают за страницы
детального просмотра, нужно настроить режим обработки 404-й ошибки. Например,
это могут быть компоненты «Новости», «Каталог», «Новость детально», «Элемент
каталога детально» — одним словом все компоненты, которые генерируют страницы
детального просмотра.
Тут без конкретного примера не обойтись, поэтому рассмотрим следующую
ситуацию: на сайте есть раздел «Новости», страница детального просмотра
новостей генерируется компонентом «Новость детально». Урлы новостей выглядят
следующим образом /news/simvolnyj-kod-novosti/
Если мы перейдем в настройки данного компонента — в самом
низу увидим блок Настройки 404 ошибки.
По-умолчанию он выглядит вот так:
Т.е. обработка 404-й ошибки не настроена. Если мы попытаемся открыть страницу с несуществующей новостью, например /news/asdfgffj4/ — получим вот такое стандартное сообщение:
Сама страничка отдает HTTP-код 200. Так быть не должно, срочно исправляем! В настройках компонента отмечаем галочки Устанавливать статус 404 и Показ специальной страницы, поле Страница для показа не заполняем, т.к. по умолчанию это страница /404.php – т.е. то, что нам нужно. Блок настроек компонента теперь выглядит следующим образом:
Теперь при попытке открыть несуществующую новость получаем нашу страницу 404:
Проверяем результат работы
Мы всё настроили, остается проверить, отдает ли наш сайт код
404 для несуществующих страниц. Для таких целей можно использовать сервис
яндекса https://webmaster.yandex.ru/tools/server-response/
Указываем ему любую несуществующую страницу нашего сайта и
получаем ответ:
Если Код статуса HTTP равен 404 Not Found — поздравляю, вы всё сделали правильно.
Теперь вы знаете, как настроить страницу-обработчик 404-й ошибки в Битриксе