Доброго времени суток.
В файле шаблона 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.
Уж очень прям интересно стало...