当前大部分用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”。