Ошибка: Parse error: syntax error, unexpected T_FUNCTION in

denis920
На сайте с 26.02.2009
Offline
193
6690

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

Тестирую один скрипт, при попытке установки выдает ошибку:

Parse error: syntax error, unexpected T_FUNCTION in /home/site/public_html/drt/libs/html1.php on line 147

Смотрю в скрипте строку 147, к ней есть пояснение:

Redwine: As of PHP 5.5.0, the preg_replace() emitts an error E_DEPRECATED level when passing in the "\e" modifier

As of PHP 7.0.0 E_WARNING is emited in this case and "\e" modifier has no effect.

Поясните, что значить такой комментарий? Версия PHP у меня старая?

LEOnidUKG
На сайте с 25.11.2006
Online
1769
#1

/e нужно убирать из функции. Её больше нельзя использовать.

https://www.google.ru/search?client=opera&q=the+preg_replace()+emitts+an+error+E_DEPRECATED+level+when+passing+in+the&sourceid=opera&ie=UTF-8&oe=UTF-8

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
denis920
На сайте с 26.02.2009
Offline
193
#2
LEOnidUKG:
/e нужно убирать из функции. Её больше нельзя использовать.

Что-то еще больше запутался :)

У меня PHP 5.2.17 получается мне нужно убрать /e из функции или использовать PHP 7.0.0 правильно?

Вот функция, какую /e нужно убрать? :)

Или я что-то неправильно понял?

function sanitize($var, $santype = 1, $allowable_tags = ''){


if ($santype == 1) {
return strip_tags($var, $allowable_tags = '');
}
elseif ($santype == 2) {
return htmlentities(strip_tags($var, $allowable_tags),ENT_QUOTES,'UTF-8');
}
elseif ($santype == 3) {
return addslashes(strip_tags($var, $allowable_tags));
}
elseif ($santype == 4) {
/*** Redwine: As of PHP 5.5.0, the preg_replace() emitts an error E_DEPRECATED level when passing in the "\e" modifier
As of PHP 7.0.0 E_WARNING is emited in this case and "\e" modifier has no effect.
***/
//return stripslashes(preg_replace('/<([^>]+)>/es', "'<'.sanitize('\\1',5).'>'",strip_tags($var, $allowable_tags)));
// Substituting preg_replace with preg_replace_callback
return stripslashes(preg_replace_callback('/<([^>]+)>/is',
function($m) {
return '<'.sanitize($m[1],5).'>';
}, strip_tags($var, $allowable_tags)));
}
elseif ($santype == 5) {
/*** Redwine: As of PHP 5.5.0, the preg_replace() emitts an error E_DEPRECATED level when passing in the "\e" modifier
As of PHP 7.0.0 E_WARNING is emited in this case and "\e" modifier has no effect.
***/
//return preg_replace('/\son\w+\s*=/is','',$var);
// Substituting preg_replace with preg_replace_callback
return preg_replace_callback('/\son\w+\s*=/is',
function($m) {
return '';
},$var);
}
}
R
На сайте с 20.02.2015
Offline
59
#3
LEOnidUKG:
/e нужно убирать из функции. Её больше нельзя использовать.

https://www.google.ru/search?client=opera&q=the+preg_replace()+emitts+an+error+E_DEPRECATED+level+when+passing+in+the&sourceid=opera&ie=UTF-8&oe=UTF-8

Выбрасывает ошибку "syntax error" а не E_DEPRECATED потому что анонимные функции появились начиная с версии 5.3


function sanitize($var, $santype = 1, $allowable_tags = ''){

if ($santype == 1) {
return strip_tags($var, $allowable_tags = '');
}
elseif ($santype == 2) {
return htmlentities(strip_tags($var, $allowable_tags),ENT_QUOTES,'UTF-8');
}
elseif ($santype == 3) {
return addslashes(strip_tags($var, $allowable_tags));
}
elseif ($santype == 4) {
/*** Redwine: As of PHP 5.5.0, the preg_replace() emitts an error E_DEPRECATED level when passing in the "\e" modifier
As of PHP 7.0.0 E_WARNING is emited in this case and "\e" modifier has no effect.
***/
return stripslashes(preg_replace('/<([^>]+)>/es', "'<'.sanitize('\\1',5).'>'",strip_tags($var, $allowable_tags)));
// Substituting preg_replace with preg_replace_callback
/*return stripslashes(preg_replace_callback('/<([^>]+)>/is',
function($m) {
return '<'.sanitize($m[1],5).'>';
}, strip_tags($var, $allowable_tags)));*/
}
elseif ($santype == 5) {
/*** Redwine: As of PHP 5.5.0, the preg_replace() emitts an error E_DEPRECATED level when passing in the "\e" modifier
As of PHP 7.0.0 E_WARNING is emited in this case and "\e" modifier has no effect.
***/
return preg_replace('/\son\w+\s*=/is','',$var);
// Substituting preg_replace with preg_replace_callback
/*return preg_replace_callback('/\son\w+\s*=/is',
function($m) {
return '';
},$var);*/
}
}

ТС, 5.5 хотябы поставьте.

S
На сайте с 30.09.2016
Offline
469
#4
denis920:
У меня PHP 5.2.17 получается мне нужно убрать /e из функции или использовать PHP 7.0.0 правильно?

Вот как будет PHP7, так и перестанет работать эта функция. А в PHP5 она нормально работает. Просто она небезопасная, потому и надо от неё уходить. И всё это не имеет отношения к "unexpected T_FUNCTION".

Ага, пока писал, уже опередили...

Собственно, ошибка и появляется из-за того, что эту функцию уже заменили, как отмечено выше.

---------- Добавлено 27.12.2016 в 22:42 ----------

rereg, я чё-то не въехал, Вы предлагаете этот кусок выкинуть без всякой замены?

На мой взгляд, более корректно либо перейти , как Вы предлагаете, на более высокую версию PHP, либо расписать именованную колбэк функцию.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
R
На сайте с 20.02.2015
Offline
59
#5

Sitealert, я раскомментировал аналог return preg_replace с e модификатором который будет работать в 5.2, а return preg_replace_callback с анонимной функцией наоборот закомментировал.

S
На сайте с 30.09.2016
Offline
469
#6

Миль пардон, раскомментирование не заметил. Потому как форумские программеры никак не хотят нормальный пэхапэ код с подсветкой сделать.

denis920
На сайте с 26.02.2009
Offline
193
#7
rereg:
Выбрасывает ошибку "syntax error" а не E_DEPRECATED потому что анонимные функции появились начиная с версии 5.3

Большое спасибо, все заработало :)

Вернее до следующего шага :)

Думаю самым правильным будет обновить PHP

Всем спасибо за помощь.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий