Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Как правильно перейти с preg_replace на preg_replace_callback?

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


     23.02.2016    Общие вопросы по PHP    566

вопрос
Всем доброго времени суток! Проблема такова. Решил переключиться на 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
33

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

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

Sander
1126

1637 | 1204

Sander - 23 февраля 2016 22:26 - Эксперт

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

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

ICQ: 404-037-556
Skype: Sander8804

svarog
33

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

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

Sander
1126

1637 | 1204

Sander - 23 февраля 2016 22:58 - Эксперт

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

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

ICQ: 404-037-556
Skype: Sander8804

svarog
33

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

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

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

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