PHP5.3开发-解决DEPRECATED错误问题

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

你可能感兴趣的:(PHP5.3开发-解决DEPRECATED错误问题)