Задать вопрос
@CubaJas
Web-программист

В чем может быть проблема в DLE 10.6 + PHP7 с функцией check_module в которой вызывается preg_replace_callback в regex передается not-aviable?

Доброго времени суток.
В файле шаблона main.tpl вызывается такой код [not-aviable=faq]smth[/not-aviable] и он корректно отрабатывает на php 5.6. Далее, сайт переносится на php 7 и шаблон становится просто пустым. Долгими поисками пришел к тому, что если удалить все упоминания [not-aviable] сайт начинает корректно работать.

Лезем глубже, а именно находим в templates.class.php метод check_module и видим там такой код:
function check_module($matches) {
		global $dle_module;
		
		$regex = '/\[(aviable|available|not-aviable|not-available)=(.+?)\]((?>(?R)|.)*?)\[\/\1\]/is';

		if (is_array($matches)) {
			
			$aviable = $matches[2];
			$block = $matches[3];
			
			if ($matches[1] == "aviable" OR $matches[1] == "available") $action = true; else $action = false;
			
			$aviable = explode( '|', $aviable );
			
			if( $action ) {
				
				if( ! (in_array( $dle_module, $aviable )) and ($aviable[0] != "global") ) $matches = '';
				else $matches = $block;
			
			} else {
				
				if( (in_array( $dle_module, $aviable )) ) $matches = '';
				else $matches = $block;
			}		
	
		}
	
		return preg_replace_callback($regex, array( &$this, 'check_module'), $matches);
	}

Убираем из переменной $regex not_aviable и сайт начинает работать, соответственно [not-aviable] отображается как обычный текст и шаблонизатор его игнорирует.

Вопрос заключается в том, почему на php 5.6 это дело работает корректно, а в php 7 нет? Я не большой знаток регулярных выражений и тонкостей работы функций, а тут конкретно preg_replace_callback, в php 7.

Уж очень прям интересно стало...
  • Вопрос задан
  • 171 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы