Проверка системы в windows
Начиная с 12-й версии битрикса, у меня стал вылетать apache при запуске скрипта "Проверка системы" (ранее скрипт назывался "Проверка сайта"). Выскакивает стандартное окно "Apache HTTP Server": "Прекращена работа программы "Apache HTTP Server"", и приводится следующая расшифровка:
Сигнатура проблемы: Имя события проблемы: APPCRASH Имя приложения: httpd.exe Версия приложения: 2.4.7.0 Отметка времени приложения: 528e59ed Имя модуля с ошибкой: php5ts.dll Версия модуля с ошибкой: 5.5.6.0 Отметка времени модуля с ошибкой: 52829310 Код исключения: c00000fd Смещение исключения: 0006e0eb Версия ОС: 6.1.7601.2.1.0.256.1 Код языка: 1049 Дополнительные сведения 1: d4eb Дополнительные сведения 2: d4eb7cf28a4f910486e91a11f70d294f Дополнительные сведения 3: 4ff0 Дополнительные сведения 4: 4ff0a70b83a65337809322291be9ff50
Ошибку вызывает тест "Размер стека и pcre.recursion_limit". Есть два решения проблемы:
1. установить в php.ini параметру pcre.recursion_limit достаточно низкое значение, битрикс рекомендует 1000, но у меня заработало только с 600. При этом, как пишет сам битрикс: "обработка строк будет работать не всегда правильно".
2. Отключить этот тест, чтобы иметь возможность посмотреть результаты других тестов.
Я предпочитаю второй вариант, т.к. лучше получить вылет Apache, чем столкнуться с неправильной обработкой строк, и не понимать в чем дело. Как это сделать? очень просто, открываем файл:
/bitrix/modules/main/classes/general/site_checker.php
Находим функцию function check_pcre_recursion(), на данный момент это строка 1582, после объявления функции добавляем строку return false;, должно получится так:
function check_pcre_recursion()
{
return false;
$strRequest = "GET "."/bitrix/admin/site_checker.php?test_type=pcre_recursion_test&unique_id=".checker_get_unique_id()." HTTP/1.1\r\n";
$strRequest.= "Host: ".$this->host."\r\n";
$strRequest.= "\r\n";
if ($res = $this->ConnectToHost())
{
if ('SUCCESS' == $strRes = GetHttpResponse($res, $strRequest, $strHeaders))
return true;
if ($strRes == 'CLEAN')
return $this->Result(null, GetMessage('SC_PCRE_CLEAN'));
}
return false;
}
Теперь эта функция проверки не будет ничего проверять, а будет всегда возвращать false, это означает, что тест не пройден.
!!!Но не переносите эту правку на боевой сервер!!! Во первых это модификация ядра, что не приветствуется. А во вторых, на боевом сервере нужно добиться, чтобы эта проверка проходила успешно, тем более на unix системах к краху Apache эта проверка не приводит.
Комментарии:
Михаил
15.01.2018 02:44:17
Максим
15.01.2018 04:44:43
Статья говорит о том, как на dev серверах под виндой избежать вылета апача.
Можно бессмысленно тратить время и настраивать винду, чтобы тест работал как надо, а можно сделать как описано в статье, и продолжить разработку. Боевые серверы работают под unix, там этой проблемы нет. А сейчас её и под виндой нет, видимо битрикс изменил тест.
Оставить комментарий: