Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Zero108

Ошибка php при регистрации: Deprecated: preg_replace()

Рекомендованные сообщения

После последнего обновления до 3.4.9 заметил сразу после сабмита при регистрации нового пользователя на сайте следующую ошибку (часть серверного пути вырезана). Можно ли как-то вылечить или нужно писать в саппорт?

Поделиться сообщением


Ссылка на сообщение

http://php.net/manual/ru/function.preg-replace.php

 

Список изменений

 

Версия Описание

5.5.0 Модификатор /e теперь считается устаревшим. Используйте функцию preg_replace_callback(). Смотрите документацию PREG_REPLACE_EVAL с дополнительной информацией и описанием проблем с безопасностью.

Либо делайте замену функций, либо понижайте версию php.

Поделиться сообщением


Ссылка на сообщение

А что такое "делайте замену функции"? Это по всему сайту в тысячах файлов что-то менять, либо в одном каком-то файле что-то поменять?

Поделиться сообщением


Ссылка на сообщение

У вас указан файл и номер строки в ошибке.

 

Все ошибки пожалуйста приводим текстом.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Стоит версия 5.5 php. В php.ini и htaccess отображение таких ошибок выключено. Задал поиск по error_reporting. Ниже список файлов. Где отключить вывод таких ошибок при регистрации пользователя?

Поделиться сообщением


Ссылка на сообщение

Вот текст ошибки:

 

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.

Поделиться сообщением


Ссылка на сообщение

Что проще: отключить вывод этой ошибки или исправить функцию? Дайте любой рабочий вариант для данного конкретного случая, пожалуйста.

Поделиться сообщением


Ссылка на сообщение

Проще отключить, естественно. Но исправить нужно, иначе этот код в последующих обновлениях 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; 
   }

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Круто. Спасибо большое!

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...