Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как правильно перейти с preg_replace на preg_replace_callback?

Как правильно перейти с preg_replace на preg_replace_callback?


     23.02.2016    Все вопросы » Общие вопросы по PHP    1168

вопрос
Всем доброго времени суток! Проблема такова. Решил переключиться на PHP 5.6 но модуль отвергает эту версию и выплёвывает ошибку. Немного поюзав я узнал что новая версия PHP не поддерживает функцию preg_replace и она заменена на preg_replace_callback. Но как пивести код в исходное состояние, использовав preg_replace_callback?
Вот строка из кода:
 $this->tpl->copy_template = preg_replace( "#\\[user_group=(.+?)\\](.*?)\\[/user_group\\]#ies", "\$this->check_user_group('\\1', '\\2', '".$this->user_group."')", $this->tpl->copy_template );

Ответил: Sander


Обновите dle до актуальной версии, так будет реально проще.
Там ооооочень много где придется переделывать preg_replace на preg_replace_callback.
И на заметку, preg_preplace поддерживается. Не поддерживается флаг `e`.

PS. А переделывать так:
 $this->tpl->copy_template = preg_replace_callback( "#\\[user_group=(.+?)\\](.*?)\\[/user_group\\]#is", array(&$this,'check_user_group'), $this->tpl->copy_template );

Ну и разумеется переписать функцию check_user_group. И так для каждой функции.

5 комментариев

svarog
Юзер

svarog - 23 февраля 2016 19:39 -

Sander, спасибо. У меня dle 10.6. Но я очень часто встречал в файлах функцию preg_replace. Неужели их все придётся перепиливать??? Я пока на РНР 5.4 посижу))) Мне это ещё не подсилу))) Но за ответ спасибо!

Sander
Эксперт

Sander - 23 февраля 2016 22:26 -

В 10.6 все необходимые функции уже переделаны под preg_replace_callback.
Это у вас какой-то хак или модуль.

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

svarog
Юзер

svarog - 23 февраля 2016 22:42 -

Да, это модуль "онлайн", но помимо этого такие функции встречаются и в самом движке. Допустим я с ними сталкивался и в персональных сообщениях, в профиле, в обратной связи т.д. Причём в некоторых файлах встречается и новая и старая вариация. Я так понимаю функция preg_replace не полностью исключена из РНР 5.6. Да Бог с ней. Я уже пол движка перепилил и довольно таки криво))) Потому подожду выхода 11 версии а там и перейду на новую версию php. Просто начал менять версию PHP, так как старая часто выдаёт 502 ошибку. Но на версии 5.6 она исчезла.

Sander
Эксперт

Sander - 23 февраля 2016 22:58 -

Вы совершенно неправильно понимаете.
Функция preg_replace не исключена и не будет иключена. Изменен лишь синтаксис одного из вариантов ее применения.
А 502 ошибка однозначно не из-за версии php. Эта ошибка выскакивает, когда сервер "зашивается" от нагрузки на одного пользователя. Зачастую это следствие неправильно написанного кода на php.

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

svarog
Юзер

svarog - 24 февраля 2016 00:10 -

Спасибо за совет. Буду значит потрашить коды. Видимо я где-то дровишек наколол. Так как 502 выскакивала и при редактировании 2-3 статей одновременно.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх