当前大部分用php语言写的网站都是基于php 5.2的,很多服务器配置的环境所谓支持的php 5也是php 5.2版本的。当然还有少数网站是基于php 4的,不过慢慢越来越多的人开始使用php 5.3。
php 5.3从一方面来讲,可以说在2007年计划php 6的中的一个pre版本,增加了很多功能,统一了很多语法,使php变得更加强大与简洁。php 5.3开始,为了更好的向php 6过渡,将未来不再支持的函数标记为deprecated。在代码中使用这些函数,将毫不留情的在页面中显示警告信息:“使用了过时的函数…”,诸如此类。
一、配置文件迁移
php 5.3开始,配置文件php.ini中的一些的配置(注释用#)将会在php执行时显示过时警告,这些配置将在php 6中不再存在,相关功能也将关闭。
1、define_syslog_variables
是否定义各种系统日志变量,如:$log_pid, $log_cron 等等。
关掉它以提高效率的好主意。
你可以在运行时调用define_syslog_variables()函数来定义这些变量。
2、register_globals
是否将 e, g, p, c, s 变量注册为全局变量。
打开该指令可能会导致严重的安全问题,除非你的脚本经过非常仔细的检查。
推荐使用预定义的超全局变量:$_env, $_get, $_post, $_cookie, $_server 。
该指令受variables_order指令的影响。
3、register_long_arrays
是否启用旧式的长式数组(http_*_vars)。
鼓励使用短式的预定义超全局数组,并关闭该特性以获得更好的性能。
4、safe_mode
sys
是否启用安全模式。
打开时,php将检查当前脚本的拥有者是否和被操作的文件的拥有者相同,相同则允许操作,不同则拒绝操作。
5、magic_quotes_gpc
是否对输入的get/post/cookie数据使用自动字符串转义( ' \ null )。
这里的设置将自动影响 $_gest $_post $_cookie 数组的值。
若将本指令与magic_quotes_sybase指令同时打开,则仅将单引号(')转义为(''),
其它特殊字符将不被转义,即( \ null )将保持原样!!
建议关闭此特性,并使用自定义的过滤函数。
6、magic_quotes_runtime
是否对运行时从外部资源产生的数据使用自动字符串转义( ' \ null )。
若打开本指令,则大多数函数从外部资源(数据库,文本文件等)返回数据都将被转义。
例如:用sql查询得到的数据,用exec()函数得到的数据,等等。
若将本指令与magic_quotes_sybase指令同时打开,则仅将单引号(')转义为(''),其它特殊字符将不被转义,即( \ null )将保持原样!!
建议关闭此特性,并视具体情况使用自定义的过滤函数。
7、magic_quotes_sybase
是否采用sybase形式的自动字符串转义(用 '' 表示 ')。
二、函数迁移
1、call_user_method()
可以用call_user_func()替代。
2、call_user_method_array()
可以用call_user_func_array()替代。
3、dl()
反对在使用dl加载扩展,php 5.3以后应用php.ini配制。
4、ereg()
可以用preg_match()替代。
5、ereg_replace()
可以用preg_replace()替代。
6、eregi()
可以用preg_match()模式‘i’替代。
7、eregi_replace()
可以用preg_replace()模式‘i’替代。
8、set_magic_quotes_runtime()
可以用magic_quotes_runtime()替代。
9、session_register()、session_unregister()、session_is_registered()
以上三个统一用$_session替代。
10、set_socket_blocking()
可以用stream_set_blocking()替代。
11、split()
可以用preg_split()替代。
12、spliti()
可以用preg_split()模式‘i’替代。
13、sql_regcase()、mysql_db_query()
可以用mysql_select_db()、mysql_query()替代。
14、mysql_escape_string()
可以用use mysql_real_escape_string()替代。
15、关于时区处理,统一用timezone对像。
三、php 5.3特点
1、直接返加new实例不再建议使用,php 6将不再支持。
2、call-time pass-by-reference参数现在不再建议使用,php 6将不再支持。
3、用{}访问字符串顺序不再建议使用,统一用[]代替,php 6 将不再支持。
四、后注
当然如果项目紧急,又要在php 5.3使用以上方法,可以配置php.ini中的error_reporting值为“e_all & ~e_notice & ~e_deprecated”。
