Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2018, 18:41   #1
Bekss
 
Аватар для Bekss
 
Регистрация: 15.07.2011
Сообщений: 4
Счастье preg_replace_callback - или убить сайт на корню!!!

Привет всем трудягам!

У меня сайт на DLE-9.6. Сверстал его как-то пару-тройку лет назад. На момент его создания, конфигурация была следующая: PHP-5.3 с Apache 2.2, mysql 5.5

Нужно было поднять версию с PHP-5.3 на PHP-5.6, однако мне удалось это сделать, несмотря, на то, что я в коде мало чего понимаю. Мне удалось изменить пару проблем связанных с модификатором (е) относящихся к подключаемым модулями. Это, конечно же, было кратковременное чудо, хотя и дебаггер заметно перестал материться и количество строк заметно сократилось. Увы, последствия поднятия версии PHP оборачиваются требованиями замены устаревшей функции, что сказывается на самочувствии и работе не только моего сайта. Однако, передо мной теперь стоит вот такая строчка, которая требует заменить устаревшую функцию preg_replace на еще более непонятную для меня современную preg_replace_callback. Полагаю, сия задача по плечу, разве что, опытному программисту, меня же сюда привело лишь отчаяние. Вот этот код:

$this->copy_template = preg_replace( "#\\{include file=['\"](.+?)['\"]\\}#ies", "\$this->load_file('\\1', 'php')", $this->copy_template );

}


А матершинная строка така:

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in C:\OpenServer\domains\iisusse-news.com\engine\classes\templates.c lass.php on line 319

Я так понимаю, здесь речь идет о том, каков должен быть код строчки подключения модулей в основном шаблоне сайта. Я решил, не будучи программистом, написать нечто эпичное - не судите строго!)):

(тут наверху есть кое-какие строки кода, но мне предлагается решить ребус именно с нижеследующим кодом, то бишь, со строкой 319)

$this->copy_template = preg_replace(
"#\\{include file=['\"](.+?)['\"]\\}#ies",
function($matches){
return $this->load_file($matches[1],$matches[php]);
},
$this->copy_template);

}

Кто может подсказать как правильно написать этот замысловатый кодец?

Кажись, здесь все правильно, но вот кусочек кода $matches[php] - в корне неверен, ибо главная страничка перестает работать. Она даже не загружается (( И как с этим справиться?

Последний раз редактировалось Bekss; 09.01.2018 в 19:42.
Bekss вне форума Ответить с цитированием
Старый 09.01.2018, 20:42   #2
olegK<<
Пользователь
 
Аватар для olegK<<
 
Регистрация: 05.11.2017
Сообщений: 59
По умолчанию

Цитата:
Сообщение от Bekss Посмотреть сообщение
"#\\{include file=['\"](.+?)['\"]\\}#ies",
А если удалить е из ies ?
Код:
is"
olegK<< вне форума Ответить с цитированием
Старый 09.01.2018, 22:09   #3
Bekss
 
Аватар для Bekss
 
Регистрация: 15.07.2011
Сообщений: 4
По умолчанию

После удаления модификатора "е" строка с матюком пропадает, но вылезает тройка багов в шаблоне связанных со строкой подключения модуля статистики, комментариев и ...

Лезет строка:
$this->load_file('engine/modules/online/online.php', 'php')

$this->load_file('engine/modules/icomm.php?max_comm=6', 'php')

$this->load_file('engine/modules/catface.php', 'php')


Они у меня в шаблоне непосредственно подключаются следующим способом:

<!-- 20 начало БЛОКА Статистики -->
{include file="STATISTIC_my_kaile.tpl"}
<!-- конец БЛОКА Статистики -->
<!-- 11 НАЧАЛО Последние комментарии iComm для DLE 9.6-10.0 -->
{include file="icomm_2013_fixed_2_my_kaile.t pl"}
<!-- КОНЕЦ комментарии iComm для DLE 9.6-10.0 -->
Третий немного по другому подключается....
Но все всегда исправно работало, пока версию PHP не поднял!

Я конечно могу ошибаться, но изучив вопрос связанный с подменой устаревшей функции, я так понял, что удалением самого модификатора "е" тут дело, увы, не ограничится(( Похоже, от нас требуется серьезные познания с регулярными выражениями. Поднял апачч до версии 2.4+ngnix 1.9, потом PHP до версии 5.6, а тут несколько строк отделяют от успеха.
Увы, сейчас собираю сайт на локалке, поэтому не могу продемонстрировать всю полноту картины.
Свет отключали у нас, поэтому был не в состоянии своевременно ответить. Спасибо за поддержку.

Последний раз редактировалось Bekss; 09.01.2018 в 22:12.
Bekss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Гиперсылка на сайт в RadStudio 10.1 на С++(разработка под Андроид): Как сделать чтобы по нажатию на лейбл или кнопку открывался сайт по гиперссылке? VladislavSito Помощь студентам 0 07.03.2017 22:53
Как убить неубиваемый процесс в Delphi? по pid или совсем уничтожить файл или процесс justprogrammer Общие вопросы Delphi 2 14.08.2016 11:15
1C8 или Сайт Jack_shade PHP 9 14.08.2014 10:28
Нужна программа или сайт pikasevich Фриланс 6 10.09.2013 15:45