PHP 5.3 开始,为了更好的向 PHP 的未来版本(PHP6) 过渡,将未来不再支持的函数标记为 DEPRECATED。在代码中使用这些函数,将毫不留情的在页面中显示警告信息:“使用了过时的函数…”,诸如此类。
那么如何面向未来,让现有的 PHP 程序平滑的向下一代 PHP 引擎过渡呢?
配置文件迁移
PHP 5.3 开始,配置文件 php.ini 中的一些配置将会在 PHP 执行时显示过时警告,这些配置将在 PHP6中不再存在,相关功能也将关闭。
1.define_syslog_variables
2.register_globals
3.register_long_arrays
4.safe_mode
5.magic_quotes_gpc
6.magic_quotes_runtime
7.magic_quotes_sybase
函数迁移
涉及到的主要的函数迁移如下:
删除函数 define_syslog_variables 引用
•删除对函数 define_syslog_variables 的引用
•将变量 $LOG_ERR, $LOG_USER 等用常量 LOG_USER, LOG_USER, … 替代
ereg, eregi 函数用 preg_match 函数替代•这几个函数的函数声明
int ereg ( string $pattern , string $string [, array &$regs ] )int eregi ( string $pattern , string $string [, array &$regs ] )int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )•虽然三者的第一个参数都是字符串,表示一个正则表达式。但是 preg_match 用的是 PCRE(Perl 兼容的正则表达式语法):正则表达式的两端用一个符号做边界,如 “/pattern/” 或者 “#pattern#”
•eregi 是乎略大小写的匹配,转换为 preg_match,第一个参数,用PCRE的参数来乎略大小写,如:”/pattern/i” 或者 “#pattern#i”
•两者的第三个参数返回的匹配的数据结构不同。ereg 的第三个参数在调用结束后,返回的是一个字符串数组,分别为完整匹配字串和各个子匹配字串。preg_match 返回的是二维数组,相当于 ereg 的字串数组中的字串在 preg_match 是一个数组,分别保存匹配值以及匹配位置。
•如果要进行多次匹配,PHP 提供了 preg_match_all 函数,其第三个参数的返回值则是一个三维数组;
ereg_replace, eregi_replace 函数用 preg_replace 函数或者 str_replace 函数来替代•和前面的 ereg 替换为 preg_match 类似,第一个参数要进行转换,头尾增加一个符号,如:”/pattern/” 或者 “#pattern#”, …
•eregi_replace 到 preg_replace 的替换,在第一个参数的后面增加正则表达式参数。如:”/pattern/i” 或者 “#pattern#i”, …
•如果 ereg_replace 的第一个参数不是正则表达式,可以用 str_replace 直接来替换。
split, spliti 函数用 explode 或则 preg_split 函数替代•split 切分字符串,如果无须用到正则表达式,使用 explode 替换是最好不过,速度最快
•对于使用正则表达式切分字串,则使用 preg_split 函数替代。替代过程和 ereg/ereg_replace 类似,只是在第一个正则表达式参数中做文章,将 split 的正则表达式前后加上一个 PCRE 的分隔符号。
mysql_db_query 函数用 mysql_select_db 和 mysql_query 函数替代•mysql_db_query 在未来版本不再支持
•将其转换为两次调用,分别是用 mysql_select_db 选择数据库,用 mysql_query 来执行 SQL 查询
mysql_escape_string 函数用 mysql_real_escape_string 函数替代
•mysql_escape_string 未来版本不再支持
•使用 mysql_real_escape_string 替代
session_register 函数,session_unregister,session_is_registered 函数用 $_SESSION 全局变量替代•这三个 session 相关函数未来不再支持
•其功能相当于直接操作全局数组 $_SESSION。可以直接向数组中赋值或者执行相应的 unset 即可实现相关功能
在代码中查抄过时函数
下面这个脚本可以用于在代码树中查找过时的 PHP 函数
#!/bin/shOPTS="-rHw"; verbose=0while [ $# -gt 0 ]; do case $1 in -v) verbose=1; shift ;; -q) verbose=0; shift ;; -*) OPTS="$OPTS $1"; shift ;; *) break; ;; esacdoneif [ $# -eq 0 ]; then echo "Usage $0 [-v] " exit 1fi[ $verbose -eq 0 ] && OPTS="$OPTS -l"DEPRECATED="call_user_method call_user_method_array define_syslog_variables dl set_magic_quotes_runtime magic_quotes_runtime set_socket_blocking sql_regcase mysql_db_query mysql_escape_string session_register session_unregister session_is_registered eregi? eregi?_replace spliti?"OPTS="$OPTS --include=*.inc --include=*.php --include=*.php5"for item in $DEPRECATED; do echo "##### find deprecated item: $item in $1: #####" grep $OPTS -E "$item\s*$" $* grep $OPTS -E "$item\s*\(" $* echo ""done+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Fix `ereg is deprecated` errors in PHP 5.3If you upgraded to PHP 5.3, chances are high you’re going to run into a few warnings or deprecated function messages.An example is the ereg family of functions, which are gone for good, as they were slower and felt less familiar than the alternative Perl-compatible preg family.To migrate ereg():ereg('\.([^\.]*$)', $this->file_src_name, $extension);
分享到:
相关推荐
项目中要用到zend Optimizer,但是目前只支持php5.2,Ubuntu默认安装的php版本为5.3,找了好多 方法,终于借助下面这篇文章的方法成功的安装了5.2及5.3两个版本的php Although Drupals 7+ run smoothly on PHP 5.3, ...
ecshop 2.7.3版本以php5.2以上版本代码会有种兼容问题导致无法使用,该程序修复了所有php版本兼容问题,亲测可用。这下再也不用为了ecshop再去安装旧版本php了
2017-2018学年高中物理(沪科版1-1)学业达标测评:第5章5.2 厨房里的革命5.3 现代化家庭含答案.docx
主要介绍了windows下安装php5.2.*,php5.3.*,php5.4.*版本的memcache扩展,需要的朋友可以参考下
php_memcache-5.2 5.3 5.4
PHP_5.3_与_PHP_5.2_开发区别和新特性
php_mongo-1.3.1.zip — PHP 5.2, 5.3 and 5.4 builds for Windows VC9 (32bit and 64bit)
WHMCS 授权文件(5.2、5.3)开心版5.3.X系列通用
PHP基于Laravel 5.2开发的Git管理系统 PHP基于Laravel 5.2开发的Git管理系统 PHP基于Laravel 5.2开发的Git管理系统 PHP基于Laravel 5.2开发的Git管理系统 PHP基于Laravel 5.2开发的Git管理系统 PHP基于Laravel ...
windos32,64位 mongodb数据库 php扩展 支持 php5.2 php5.3 php5.4
压缩包包括多种版本的mongo扩展,由于下载了别人的php_mongo扩展不适用,所以自己整理了大量的mongo扩展,提供给不知道去官方网站下载的朋友使用。 大家可以根据自己不同的电脑系统及PHP版块选择不同的mongo扩展, ...
哨兵一号的处理插件。由sarmap公司研发,国际知名雷达图像处理软件。ENVI SARscape由核心模块及5个扩展模块组成,用户可根据自己的应用要求、资金情况合理地选择不同功能模块及其不同组合,对系统进行剪裁,充分利用...
memcache 扩展,PHP5.2、5.3、5.4、5.5、5.6, 32、64 位,以及其他版本下载地址
PHP ZendDebugger,支持Windows PHP版本(4.3.x, 4.4.x, 5.0.x, 5.1.x,5.2.x,5.3.x),老的版本这年头连官方网站都不知道去哪里找了。有线程安全(ts)与不安全(nts),请放心使用。这种资源比单个的dll文件要好一点,...
好不容易才收集齐全的php_redis.dll各版本扩展 php5.2 5.3 在配置文件php.ini里面添加 extension=php_redis.dll php5.3n 5.4n 在配置文件php.ini里面添加 extension=php_igbinary.dll extension=php_redis.dll
利用ffmpeg解决php5.2,php5.3的视频转码,截屏问题,
威利普LED-ECS编辑控制系统,是一款专门用于LED图文控制卡的配套软件。其具有功能齐全,界面直观,操作简单、方便等优点。自发布以来,受到了广大用户的一致好评。
最新 PHP5.2, 5.3, 5.4, 5.5的windows安装memcached 服务端的各版本 php_memcache.dll 下载,压缩包文件非常全包含 32位 和 64位两个版本 具体安装方法参考:...
PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar PHP5.4:Short Open Tag, ...