исправление ошибок Deprecated: Function is deprecated in

Ваш сайт стал тормозить и посмотрев error.log либо просто зайдя на свой сайт вы увидели одну из ошибок

Deprecated: Function ereg() is deprecated in ...
Deprecated: Function eregi() is deprecated in ...
Deprecated: Function ereg_replace() is deprecated in ...
Deprecated: Function split() is deprecated in ...
Deprecated: Function set_magic_quotes_runtime() is deprecated in ...
Deprecated: Assigning the return value of new by reference is deprecated in ...
Deprecated: Call-time pass-by-reference has been deprecated in ...
Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in ...

Это означает, что хостер обновил версию php до 5.3 (или выше) и в движке или установленных модулях/плагинах на сайте используются и до сих пор не исправлены устаревшие функции php (версии php 5.3 и выше).

Есть несколько способов исправления:

1й — простой
Если есть возможность, в панели хостинга сменить версию php на 5.2 или ниже, либо попросить хостера понизить установленную на сервере версию, либо просто переехать на хостинг с php 5.2 или ниже

2й — плохой
в php.ini изменить error_reporting = E_ALL на

E_ALL | E_DEPRECATED

или в .htaccess добавить в начало

php_value display_errors 22527

или в конфигурационный файл движка добавьте в начало после открывающего ini_set('error_reporting', E_ALL & ~E_DEPRECATED); или error_reporting(0);

Этот способ лишь отключит вывод ошибок об устаревших функциях, но сами функции работать не будет.

3й — временный
В php 5.3 не убрали устаревшие функции и лишь предупреждают о том что они устарели, в php 5.4 и выше они удалены.
Поэтому если на сервере php 5.3, то работоспособность функций можно включить.
Идем в php.ini и ищем блок

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; //php.net/mbstring.func-overload
; mbstring.func_overload = 0

либо создаем свой php.ini, если хостер позволяет таким способом управлять настройками php.
0 — Оставить все без изменений.
1-4 Включить одну из функций.
7 — Включить сразу все функции.
Слово «включить» тут не совсем корректно. Речь идет об включении поддерживания старых функций, при этом новые будут отключены.
Убираем ; строку и присваиваем включить старые функции

mbstring.func_overload = 7

4й — исправление «автоматически»
Большинство движков и модулей/плагинов можно обновить с официальных сайтов до более новых версий , в которых уже исправлены устаревшие функции (либо обратиться в техподдержку с просьбой выпуска исправленных версий)

5й — исправление «вручную»
Однако есть движки/модули/плагины, которые больше не поддерживаются и не разрабатываются.
Это не проблема — функции можно поправить вручную.
Вот небольшая шпаргалка(использование — функции заменить, параметры экранировать слешем / либо иногда ~ ):

call_user_method() использовать call_user_func() 
call_user_method_array() использовать call_user_func_array()
define_syslog_variables()
dl()
ereg() использовать preg_match()
ereg_replace() использовать preg_replace()
eregi() использовать preg_match() с модификатором "i"
eregi_replace() использовать preg_replace() с модификатором "i" 
set_magic_quotes_runtime() использовать magic_quotes_runtime()
session_register() использовать  $_SESSION 
session_unregister()  использовать $_SESSION 
session_is_registered() использовать $_SESSION 
set_socket_blocking() использовать stream_set_blocking()
split() использовать preg_split() или explode()
spliti() использовать preg_split() с модификатором "i" 
sql_regcase()
mysql_db_query() использовать mysql_select_db() и mysql_query()
mysql_escape_string() использовать mysql_real_escape_string()

Примеры замены:
1.
до

if (eregi('^new\=([a-z0-9]+)', $_GET['src'], $matches)) {

после

if (preg_match('/^new\=([a-z0-9]+)/i', $_GET['src'], $matches)) {

2.
до

if (eregi('^(f|ht)tps?://', $_GET['src'])) {

после

if (preg_match('~^(f|ht)tps?://~i', $_GET['src'])) {

3.
до

if (ereg('^'.preg_quote($nice_docroot).'(.*)$', $nice_cachefile, $matches)) {

после

if (preg_match('/^/'.preg_quote($nice_docroot).'(.*)$', $nice_cachefile, $matches)) {

4.
до

return ereg_replace('2037' . '$', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));

после

return preg_replace('/2037$/', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));

5.
до

$str = split("\n",$which_text);

после

$str = explode("\n",$which_text);

6.
до

$pieces = split('[[:space:]]+', $search_str);

после

$pieces = preg_split('/[[:space:]]+/', $search_str);

7.
до

$temp_array = split($needle, $string);

после

$temp_array = preg_split('/' . $needle . '/', $string);

8.
до

set_magic_quotes_runtime(0);

после

ini_set("magic_quotes_runtime", 0);

9.
до

...
$mqr=get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
...
set_magic_quotes_runtime($mqr);
...

после

...
//$mqr=get_magic_quotes_runtime();
ini_set("magic_quotes_runtime", 0);
...
//set_magic_quotes_runtime($mqr);

Почти всегда используется слеш / в качестве экрана. Но иногда он не срабатывает и появляется ошибка

Warning:preg_match() [function.preg-match]: Unknown modifier 'тут_любая_буква_или_знак' in home/.../файл.php

В таких случаях используйте в качестве экрана ~…~ (или ~…~i) , вместо /…/ (или /…/i)

Такие предупреждения

PHP Deprecated:  Assigning the return value of new by reference is deprecated in
PHP Deprecated:  Call-time pass-by-reference has been deprecated in

говорят, что в функциях используется амперстанд &, его надо удалить:
1.
до

$contentElement =& new ContentElement( $xmlDoc );

после

$contentElement = new ContentElement( $xmlDoc );

2.
до

preg_match_all( $pattern, $text, &$links, PREG_SET_ORDER );

после

preg_match_all( $pattern, $text, $links, PREG_SET_ORDER );
//set_magic_quotes_runtime($mqr);

Если после замены mysql_escape_string() на mysql_real_escape_string() получаете

Warning: mysql_real_escape_string(): A link to the server could not be established in

проверяйте код, т.к. обязательно перед этой функцией должна идти фукнция открытия соединения с базой.

2 комментария

Аватар

Nik on 20.08.2016 at 20:21.

Спасибо за разъяснения, а то грешил на вирус. Пару файлов перелопатил, сменив eregi на preg_match и все заработало!

Ответить

kgtu5

kgtu5 on 30.08.2016 at 12:22.

;-)

Ответить

Скажите свое мнение

ваш email не публикуется. обязательно *

;-) :yawn: :whew: :toivo: :tmi: :time: :thinking: :talking: :sweating: :swear: :sun: :star: :smoke: :smirk: :sleepy: :skype: :shock: :shake: :rofl: :rain: :punch: :puke: :poolparty: :pizza: :phone: :party: :oops: :nod: :no: :ninja: :neutral: :nerd: :music: :muscle: :mrgreen: :movie: :mooning: :mmm: :middlefinger: :makeup: :mail: :mad: :lol: :lipssealed: :kiss: :itwashtme: :inlove: :idea: :hi: :heidy: :heart: :headbang: :happy: :handshake: :giggle: :fubar: :flower: :evilgrin: :emo: :dull: :drunk: :drink: :doh: :devil: :dance: :cry: :cool: :coffie: :clapping: :cash: :call: :cake: :bug: :brokenheart: :bow: :blush: :beer: :bear: :bandit: :arrow: :angry: :angel: :^) :???: :?: :-| :-o :-P :-D :-) :-( :!:

 

*

code

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.