Технический сбой

Сайт временно работает в режиме только для чтения, идут восстановительные работы. Приносим свои извинения за неудобства.
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как правильно перейти с preg_replace на preg_replace_callback?

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


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

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

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

Sander
PHP-developer

Sander - -

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

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

Telegram: @sandev
Skype: Sander8804

svarog
Юзер

svarog - -

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

Sander
PHP-developer

Sander - -

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

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

Telegram: @sandev
Skype: Sander8804

svarog
Юзер

svarog - -

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

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

наверх