January 20, 201610 yr После последнего обновления до 3.4.9 заметил сразу после сабмита при регистрации нового пользователя на сайте следующую ошибку (часть серверного пути вырезана). Можно ли как-то вылечить или нужно писать в саппорт?
January 20, 201610 yr http://php.net/manual/ru/function.preg-replace.php Список изменений Версия Описание5.5.0 Модификатор /e теперь считается устаревшим. Используйте функцию preg_replace_callback(). Смотрите документацию PREG_REPLACE_EVAL с дополнительной информацией и описанием проблем с безопасностью.Либо делайте замену функций, либо понижайте версию php.
January 20, 201610 yr Author А что такое "делайте замену функции"? Это по всему сайту в тысячах файлов что-то менять, либо в одном каком-то файле что-то поменять?
January 20, 201610 yr У вас указан файл и номер строки в ошибке. Все ошибки пожалуйста приводим текстом.
January 20, 201610 yr Author Стоит версия 5.5 php. В php.ini и htaccess отображение таких ошибок выключено. Задал поиск по error_reporting. Ниже список файлов. Где отключить вывод таких ошибок при регистрации пользователя?
January 20, 201610 yr Author Вот текст ошибки: Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in пропущено/a108.net/admin/sources/base/core.php on line 4861 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in пропущено/a108.net/admin/sources/base/core.php on line 4864 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in пропущено/a108.net/admin/sources/base/core.php on line 4867 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in пропущено/a108.net/admin/sources/base/core.php on line 4861 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in пропущено/a108.net/admin/sources/base/core.php on line 4864 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in пропущено/a108.net/admin/sources/base/core.php on line 4867 В указанных строках находится след. код: public static function utf8ToEntities($string) { /* * @see http://en.wikipedia.org/wiki/UTF-8#Description * @link http://community.invisionpower.com/tracker/issue-23681-possible-addition/ */ # Four-byte chars $string = preg_replace( "/([\360-\364])([\200-\277])([\200-\277])([\200-\277])/e", "'' . ( ( ord('\\1') - 240 ) * 262144 + ( ord('\\2') - 128 ) * 4096 + ( ord('\\3') - 128 ) * 64 + ( ord('\\4') - 128 ) ) . ';'", $string ); /* Three byte chars */ $string = preg_replace( "/([\340-\357])([\200-\277])([\200-\277])/e", "''.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'", $string ); /* Two byte chars */ $string = preg_replace("/([\300-\337])([\200-\277])/e", "''.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", $string); return $string; } Для указанной версии 3.4.9 используется пхп 5.5.
January 20, 201610 yr Author Что проще: отключить вывод этой ошибки или исправить функцию? Дайте любой рабочий вариант для данного конкретного случая, пожалуйста.
January 20, 201610 yr Проще отключить, естественно. Но исправить нужно, иначе этот код в последующих обновлениях php станет не рабочим. Исправить можно просто переписав под preg_replace_callback Открыть /admin/sources/base/core.php Найти public static function utf8ToEntities($string) { /* * @see http://en.wikipedia.org/wiki/UTF-8#Description * @link http://community.invisionpower.com/tracker/issue-23681-possible-addition/ */ # Four-byte chars $string = preg_replace( "/([\360-\364])([\200-\277])([\200-\277])([\200-\277])/e", "'' . ( ( ord('\\1') - 240 ) * 262144 + ( ord('\\2') - 128 ) * 4096 + ( ord('\\3') - 128 ) * 64 + ( ord('\\4') - 128 ) ) . ';'", $string ); /* Three byte chars */ $string = preg_replace( "/([\340-\357])([\200-\277])([\200-\277])/e", "''.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'", $string ); /* Two byte chars */ $string = preg_replace("/([\300-\337])([\200-\277])/e", "''.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", $string); return $string; } Заменить на: public static function utf8ToEntities($string) { /* * @see http://en.wikipedia.org/wiki/UTF-8#Description * @link http://community.invisionpower.com/tracker/issue-23681-possible-addition/ */ # Four-byte chars $string = preg_replace_callback( "/([\360-\364])([\200-\277])([\200-\277])([\200-\277])/", function( $match ) { return ''.( ( ord($match[1]) - 240 ) * 262144 + ( ord($match[2]) - 128 ) * 4096 + ( ord($match[3]) - 128 ) * 64 + ( ord($match[4]) - 128 ) ) . ';'; }, $string ); /* Three byte chars */ $string = preg_replace_callback( "/([\340-\357])([\200-\277])([\200-\277])/", function( $match ) { return ''.((ord($match[1])-224)*4096 + (ord($match[2])-128)*64 + (ord($match[3])-128)).';'; }, $string ); /* Two byte chars */ $string = preg_replace_callback("/([\300-\337])([\200-\277])/", function( $match ) { return ''.((ord($match[1])-192)*64+(ord($match[2])-128)).';'; }, $string); return $string; }
После последнего обновления до 3.4.9 заметил сразу после сабмита при регистрации нового пользователя на сайте следующую ошибку (часть серверного пути вырезана). Можно ли как-то вылечить или нужно писать в саппорт?