PHP5.3开发-解决DEPRECATED错误问题
2013-06-09 16:46
260 查看
2011-05-17 16:08:45 来源:SeaYee
当前大部分用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错误问题
- 解决php 5.3 deprecated 错误问题
- 解决php 5.3 deprecated 错误问题
- php解决微信开发中用户昵称中的特殊字符与emoji表情写入mysql错误的问题
- PHP遇到问题时怎么解决(错误日志)
- 面向 PHP 5.3 的 PHP 开发——DEPRECATED
- 关于Xdebug 在PHP5.3中无法取得local variable值的问题解决
- PHP开发-PHPMyAdmin 1045 Access denied for user错误解决办法
- PHP问题:Deprecated: Function split() is deprecated in解决方法
- 开发常见错误解决(2)WSE3.0安装问题,VS2005集成
- 解决php deprecated 的问题
- php出现内存位置访问无效错误问题解决方法
- PHP开发中常见的安全问题详解和解决方法
- PHP服务端项目开发经历——解决Android客户端中多图片上传的问题
- web开发各种乱码问题处理全集 保证解决99%的乱码错误(包括mysql的乱码解决,使用struts2框架的乱码问题)
- AMFPHP1.4与PHP5.3及以上版本号不兼容问题的解决
- PHP开发常见问题解决列表
- 解决Centos 5.3 phpmyadmin中“无法载入 mcrypt 扩展,请检查 PHP 配置”问题
- 64位win7手动搭建php开发环境Apache+MySQL+php及相关配置,问题解决方法
- php(LAMP)开发环境配置相关问题及解决办法