欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP5.3开发

程序员文章站 2022-03-21 16:01:55
...

当前大部分用PHP语言写的网站都是基于PHP 5.2的,很多服务器配置的环境所谓支持的PHP 5也是PHP 5.2版本的。当然还有少数网站是基于PHP 4的,不过慢慢越来越多的人开始使用PHP 5.3。 PHP 5.3从一方面来讲,可以说在2007年计划PHP 6的中的一个PRE版本,增加了

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