Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Помогите устранить ошибку preg_replace(): The /e modifier is deprecated

Перешел на новый хостинг. Там PHP 5.6.16. На старом была версия 5.2

Теперь код
if(strlen($Condition['pattern'])&&preg_match($Condition['pattern'],$fileInfo['name'])){
	$allowedActions[$action] = array('link'=>str_replace('\\','/',
	
	preg_replace('/%([^%]+)%/e','isset($fileInfo[\'\\1\'])?$fileInfo[\'\\1\']:\'%\\1%\'',$Condition['link'])),
									'icon'=>$Condition['icon'],
									'target'=>$Condition['target'],
									'name'=>$action);
	if(!$allowedActions['default']['link']&&($action!='delete')){
		$allowedActions['default']=$allowedActions[$action];
		$allowedActions['default']['name'] = $action;
	}

}

На строке с preg_replace выдает ошибку
preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

Помогите строку с preg_replace заменить на код с использованием preg_replace_callback.
Ответ: Нужно какую-нибудь нормальную IDE, она бы показала вам эту ошибку сразу.
Вопрос: Ошибка Warning: preg_replace() Как это победить?

Всем привет.

Столкнулся и я с такой ошибкой в php 5.6

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/html/test.site.ru/engine/classes/parse.class.php on line 410

сама строка

PHP
1
$source = preg_replace( "#\[uppod=([^\]]+)\]#ies", "\$this->build_uppod('\\1')", $source );
переделываем на такую

PHP
1
$source = preg_replace_callback( "#\[uppod=([^\]]+)\]#is", function($m) use ($this){return $this->build_uppod($m[1]);}, $source );
Получаем ошибку

Fatal error: Cannot use $this as lexical variable.

да, вот что мне phpinfo говорит

PHP Version 5.6.14-0+deb8u1
Apache Version Apache/2.4.10 (Debian)

Заранее спасибо.
Ответ: Вторая ссылка дудла

PHP
1
2
$host = $this;
$recfunc = function($id, $name) use ($host)
Должно быть как то так
PHP
1
2
$obj = $this;
$source = preg_replace_callback( "#\[uppod=([^\]]+)\]#is", function($m) use ($obj ){return $obj->build_uppod($m[1]);}, $source );
Вопрос: переделать preg_replace в preg_replace_callback

Обновил Linux Debian до Jessie. В дистрибютиве Jessie по умолчанию php 5.6. Эта версия перестала поддерживать функцию preg_replace(). В результате появилась такая ошибка:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in X.php on line 224

Люди добрые помогите переделать preg_replace в preg_replace_callback!

if (empty($route['no_encode'])) {
$realUrl = preg_replace('/\:([^\/]+)/e', 'urlencode($parametersWithDefaults["\\1"])', $routeUrl);
} else {
// Use "no_encode" option
$realUrl = preg_replace('/\:([^\/]+)/e', 'in_array("\\1", $route["no_encode"]) ? $parametersWithDefaults["\\1"] : urlencode($parametersWithDefaults["\\1"])', $routeUrl);
Ответ: кстати говоря, в php7 будет введена удобная функция preg_replace_callback_array()
Вопрос: Ошибка Warning: preg_replace()

Всем привет.

Столкнулся и я с такой ошибкой в php 5.6

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/html/test.site.ru/engine/classes/parse.class.php on line 410

сама строка

Код:
$source preg_replace"#\[uppod=([^\]]+)\]#ies""\$this->build_uppod('\\1')"$source ); 


переделываем на такую

Код:
$source preg_replace_callback"#\[uppod=([^\]]+)\]#is", function($m) use ($this){return $this->build_uppod($m[1]);}, $source ); 


Получаем ошибку

Fatal error: Cannot use $this as lexical variable.

да, вот что мне phpinfo говорит

PHP Version 5.6.14-0+deb8u1
Apache Version Apache/2.4.10 (Debian)

Заранее спасибо.

PHP, JavaScript, SQL и другой код пишите внутри тегов [code=php]Тут код[/code]
Ответ:
mkramer писал(а):$this и так доступен в замыканиях
бум знать :D
Вопрос: Ошибка "The /e modifier is deprecated"

Создал сайт, и вот появилась такая ошибка :
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /profiles/m/mr/mrl/mrleonardos/*********/system/classes/templates.php on line 278
Прошу,скажи как это можно исправить
Ответ: Спасибо
Вопрос: Устаревший модификатор /e в preg_replace()

Deprecated: preg_replace(): The /e modifier is deprecated, use reg_replace_callback
Собственно 1 строка - оригинал, далее моя попытка это исправить.
$str = preg_replace('/\&\#([0-9]+)\;/me', "code2utf('\\1', {$lo})", $str);
$str = preg_replace_callback(
'/\&\#([0-9]+)\;/m',
function ($matches) {
return code2utf($matches[1], $lo);
},
$str
);

Все ли тут правильно ? :unsure:
Ответ:
модификатор e выкинули, как потенциально опасный, поэтому и ругается :)
Вопрос: Thread.Resume is Deprecated как быть?

По алгоритму сначала создается поток Thread.Create(True); т.е. запуск в последствии
ну и потом запускаю его Thread.Resume.
Получаю предупреждение "is Deprecated" ну и как быть,
забить на предупреждения, и чем это чревато в будующем?
Ответ:
iStrannik
По алгоритму сначала создается поток Thread.Create(True); т.е. запуск в последствии
ну и потом запускаю его Thread.Resume.
Получаю предупреждение "is Deprecated" ну и как быть,


{$WARN SYMBOL_DEPRECATED OFF}
...
{$WARN SYMBOL_DEPRECATED ON}

iStrannik
и чем это чревато в будующем?


Расстрелом из говномета за неуважение к русскому языку.
Вопрос: Preg_replace(): Unknown modifier '{'

PHP
1
2
3
4
5
6
7
<?php
$vtt = file_get_contents("1.vtt");
preg_replace("[0-9]{7,}", "", $vtt);// Заменяю нужные числа на пустоту
$new = fopen("1.vtt", "w+"); // Делаю файл пустым
fwrite($new, $vtt); // Записываю измененную переменную в файл
fclose($new);
?>
И получаю ошибку "Unknown modifier '{'" на четвертой строке.

PHP
1
2
$vtt = file_get_contents("1.vtt");
if (ereg("[0-9]{7,77}", $vtt)) echo "1";
Выводит единицу.

В чём проблема с preg_replace()?
Ответ:
PHP
1
2
3
4
5
<?php
$vtt = file_get_contents("1.vtt");
$vtt = preg_replace("#[0-9]{7,}#", "", $vtt);// Заменяю нужные числа на пустоту
file_put_contents("1.vtt" , $vtt);
?>
Вопрос: Preg_replace и числа

данная строка выдает ошибку Warning: preg_replace(): Unknown modifier '2' in C:\xampp\htdocs\test.php on line 44
как ее исправить? я так понял цифру два нужно как-то оформить в виде регулярок, или нет?
PHP
1
$refpood = preg_replace("/page/2/tab/", "/page/$z/tab/" , $refpood);
Ответ:
Сообщение от vasukkk
данная строка выдает ошибку Warning: preg_replace(): Unknown modifier '2' in C:\xampp\htdocs\test.php on line 44
как ее исправить? я так понял цифру два нужно как-то оформить в виде регулярок, или нет?
$refpood = preg_replace("/page/2/tab/", "/page/$z/tab/" , $refpood);
Регулярное выражение обрамляется разделителями (в начале и в конце регулярного выражения должны стоять одинаковые симолы). В Вашем случае в качестве разделителя выступает "/". Подробнее тут и посмотрите примеры тут

Нужно либо выбрать другие разделители, либо экранировать символы / посреди регулярного выражения.
Вопрос: Preg_replace не получается сделать замену с $2

Здравствуйте!

Помогите пожалуйста сделать замену из массива $url;

Я подставляю $2, но не правильно получается.

PHPВыделить код

PHP
1
$arResult["DETAIL_TEXT"] = preg_replace("#\[(image|image-left|image-right), (\d)\]#ui", $url["$2"], $arResult["DETAIL_TEXT"]);
Не работает вот здесь ->

Как правильно сделать?

Добавлено через 4 часа 29 минут
Как только я не пробовал но замена с массива не подставляется, выходит что нельзя?

Или вот тоже самое только чтоб было понятнее:

Добавлено через 5 часов 7 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$text = "У взрослого населения отмечено превышение недельного порога. Число госпитализированных уменьшилось на 21 %.
[image-left, 3]
 Диагноз «грипп» поставлен 140 пациентам. Частота обнаружения вируса гриппа А (Н1N1) высокая во всех муниципалитетах округа – это сообщает Роспотребнадзор. 
[image-right, 1]
В целом по региону эпидпорог все еще превышен на 20 %. Карантин в некоторых образовательных учреждениях округа сохраняется – закрыты почти 30 % школ. Частично приостановлена работа в 76 классах 33-х образовательных учреждений. 
[image, 2]
Самая высокая заболеваемость отмечается в Кондинском районе, Пыть-Яхе, Радужном, Югорске, Покачах, Белоярском и в Сургуте.";
 
$image[1] = "Картинка 1";
$image[2] = "Картинка 2";
$image[3] = "Картинка 3";
 
$text = preg_replace("#\[(image|image-left|image-right), (\d)\]#ui", $image[$2], $text);
 
echo $text;
Ответ:
PHP
1
$text = preg_replace_callback("#\[(image|image-left|image-right), (\d)\]#ui", function($m) use($image) {return $image[$m[2]];}, $text);