Проверка системы в windows

12.04.2014

Начиная с 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

Мудак, стек опредиляется операционной системой, и php.ini не может его привысить если это Windows то ищи параметр который позволит применять память так как надо

Максим

15.01.2018 04:44:43

Михаил, быть быдлом - ничего хорошего...

Статья говорит о том, как на dev серверах под виндой избежать вылета апача.
Можно бессмысленно тратить время и настраивать винду, чтобы тест работал как надо, а можно сделать как описано в статье, и продолжить разработку. Боевые серверы работают под unix, там этой проблемы нет. А сейчас её и под виндой нет, видимо битрикс изменил тест.

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

Представьтесь пожалуйста:
Электронная почта:
Электронный адрес не публикуются
Текст сообщения:
Для подсветки кода, оборачивайте ваш код в теги <code></code>
Введите 5 цифр с картинки:

Рекомендую:

Поделюсь промокодами для хостинга TimeWeb!

Поддержать проект: