Устаревшие функции и возможности в PHP 5.3.x
PHP 5.3.0 вводит два новых уровня ошибок: E_DEPRECATED
и E_USER_DEPRECATED
. Уровень ошибки E_DEPRECATED
используется, чтобы показать, что функция или возможность устарела.
Ошибка E_USER_DEPRECATED
предназначена для обозначения
устаревших функций в пользовательском коде, подобно уровням
E_USER_ERROR
и E_USER_WARNING
.
Следующий список - это перечень устаревших INI-директив. Использование любой из
этих директив будет приводить к генерации ошибки E_DEPRECATED
при запуске.
- define_syslog_variables
- register_globals
- register_long_arrays
- safe_mode
- magic_quotes_gpc
- magic_quotes_runtime
- magic_quotes_sybase
- Комментарии, начинающиеся с символа "#", теперь считаются устаревшими в INI-файлах.
Устаревшие функции:
- 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())
- spliti() (используйте preg_split() с модификатором 'i')
- sql_regcase()
- mysql_db_query() (используйте mysql_select_db() и mysql_query())
- mysql_escape_string() (используйте mysql_real_escape_string())
- Передача строки, задающей категорию функций, на которые будет влиять установка локали, сейчас считается устаревшим вариантом. Используйте вместо этого семейство констант LC_*
-
Параметр
is_dst
в функции mktime(). Вместо него используйте новые функции работы с временными зонами.
Устаревшие возможности:
- Присвоение по ссылке возвращаемого значения оператором new является устаревшим.
- Передача по ссылке во время исполнения считается устаревшим способом.
- Что нового в PHP 5.3.x ?
- Обратно несовместимые изменения
- Новые возможности
- Изменения в поддержке Windows
- Изменения в модулях SAPI
- Устаревшие функции и возможности в PHP 5.3.x
- Функции и возможности, которые ранее считались устаревшими, а теперь снова возвращены в PHP 5.3.x
- Новые параметры
- Новые функции
- Новые обертки потоков
- Новые фильтры потоков
- Новые константы классов
- Новые методы
- Новые расширения
- Удаленные расширения
- Другие изменения в расширениях
- Новые классы
- Новые глобальные константы
- Изменения в работе с INI-файлами
- Другие изменения
Коментарии
A backward compatibility break which is not documented:
Fatal error: Uncaught exception 'RuntimeException' with message 'Directory name must not be empty.'
This happens with new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $staticPath ) )
If you previously defined register_long_arrays in php.ini and have a lot of code with $HTTP_*_VARS that need to be replaced the following may help on *.nix systems:
sed -i 's/\$HTTP_\(.*\)_VARS/\$_\1/g' filename.php
What this command does is replace all occurrences of $HTTP_*_VARS with their respective $_ counter parts, e.g. $HTTP_COOKIES_VAR to $_COOKIES
To replace alot of files, you might combine it with the find command:
find ./ -name "*.php" -exec sed -i 's/\$HTTP_\(.*\)_VARS/\$_\1/g' {} \;
For other deprecated variables like $HTTP_POST_FILES change your sed arguments:
sed -i 's/\$HTTP_POST_FILES/\$_FILES/g'
Deprecated variables created by the register_long_arrays directive as far as I know are:
$_POST
$_GET
$_SERVER
$_ENV
$_COOKIE
$_SESSION
Correction on my previous note.
sed -i 's/\$HTTP_\(.*\)_VARS/\$_\1/g' {} \;
will screw up multiple instances of $HTTP_*_VARS in the file.
You'll have to use an instance of sed like:
sed -i 's/\$HTTP_SERVER_VARS/\$_SERVER/g'
i.e.
find ./ -name "*.php" -exec sed -i 's/\$HTTP_POST_VARS/\$_POST/g' {} \;
find ./ -name "*.php" -exec sed -i 's/\$HTTP_GET_VARS/\$_GET/g' {} \;
...
for each of the deprecated variables you might have in your files.
It also occurred to me a simple php conversion script would also work:
$search=array(
"/HTTP_SERVER_VARS/",
"/HTTP_POST_VARS/",
"/HTTP_ENV_VARS/",
"/HTTP_GET_VARS/",
"/HTTP_COOKIE_VARS/",
"/HTTP_SESSION_VARS/",
"/HTTP_POST_FILES/");
$replace=array(
"_SERVER",
"_POST",
"_ENV",
"_GET",
"_COOKIES",
"_SESSION","_FILES");
$content=file_get_contents("somefile.php");
$content=preg_replace($search,$replace,$content);
file_put_contents("somefile.php",$content);
add directory recursion functions, ect.
mktime () looks not deprecated
see
mktime
(PHP 4, PHP 5, PHP 7)
mktime — Get Unix timestamp for a date