Преобразование preg_replace в preg_replace_callback

DY
На сайте с 21.11.2016
Offline
2
3026

Доброго времени суток друзья!

При переносе сайта (modx evo) на новый сервер получил такое вот "чудо"

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in ... /manager/includes/document.parser.class.inc.php on line 943

Почитав в интернетах по этому поводу: preg_replace модификатор /e теперь считается устаревшим. Используйте функцию preg_replace_callback()

Источник: http://php.net/manual/ru/function.preg-replace.php

Вроде бы все стало ясно, но ... к сожалению знаний что бы исправить это самому не хватает.

Честно пытался разобраться самостоятельно, но это так ни к чему и не привело.

Прошу помочь с преобразованием записи или натолкнуть на другое решение.

Вот кусок (Красным выделил строку на которую ругается):

function rewriteUrls($documentSource) {
// rewrite the urls
if ($this->config['friendly_urls'] == 1) {
$aliases= array ();
foreach ($this->aliasListing as $item) {
$aliases[$item['id']]= (strlen($item['path']) > 0 ? $item['path'] . '/' : '') . $item['alias'];
}
$in= '!\[\~([0-9]+)\~\]!ise'; // Use preg_replace with /e to make it evaluate PHP
$isfriendly= ($this->config['friendly_alias_urls'] == 1 ? 1 : 0);
$pref= $this->config['friendly_url_prefix'];
$suff= $this->config['friendly_url_suffix'];
$thealias= '$aliases[\\1]';
$found_friendlyurl= "\$this->makeFriendlyURL('$pref','$suff',$thealias)";
$not_found_friendlyurl= "\$this->makeFriendlyURL('$pref','$suff','" . '\\1' . "')";
$out= "({$isfriendly} && isset({$thealias}) ? {$found_friendlyurl} : {$not_found_friendlyurl})";
$documentSource= preg_replace($in, $out, $documentSource);
} else {
$in= '!\[\~([0-9]+)\~\]!is';
$out= "index.php?id=" . '\1';
$documentSource= preg_replace_($in, $out, $documentSource);
}
return $documentSource;
}

Надеюсь на вашу помощь и заранее благодарен!

p.s. даунгрейд версии php прошу не предлагать

K5
На сайте с 21.07.2010
Offline
209
#1

видимо у вас очень старая версия modx, т.к. modx evo нормально поддерживает php 5.5

https://modx.com/download/other-versions.html?releaseKey=evolution-1.0.15

https://github.com/modxcms/evolution/issues/413

обновите движок и проблем не будет

аська 45два48499два записки на работе (http://memoryhigh.ru) помогу с сайтом, удалю вирусы, настрою впс -> отзывы ТУТ (/ru/forum/836248) и ТАМ (http://www.maultalk.com/topic140187.html) !!!всегда проверяйте данные людей, которые сами пишут вам в аську или скайп!!!
R
На сайте с 20.02.2015
Offline
59
#2

В самом начале функции добавьте строчку

error_reporting(ini_get("error_reporting") & ~8192);

Проблему снимет, а по уму как выше заметили, надо обновить движок если есть такая возможность.

LeonCrab
На сайте с 30.01.2007
Offline
189
#3

Лучшее решение - обновить MODX до актуальной версии, тем более что совсем недавно в паблик ушла серьезная уязвимость и пострадало множество сайтов.

Закроете эту ошибку - вылезет следующая, в старых версиях MODX множество мест, где использовались функции, которые помечены как устаревшие в версиях РНР, которые сейчас наиболее востребованы (5.6 & 7.0).

Помощь в создании сайтов на MODX, Laravel, Slim. В личку. Хостинг, которому я доверяю (https://beget.com/p181956).
DY
На сайте с 21.11.2016
Offline
2
#4

Ребята, всем большое спасибо за советы!

p.s. По вашим советам, моя проблема решилась обновлением ...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий