- 浏览: 197407 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
guji528:
使用Python通过正则表达式替换很方便:
sprin ...
Python正则表达式指南 -
guji528:
很实用,先keep再看
Python正则表达式指南 -
yushine:
1,2,3,5 已经做了剩下的本来也正准备做。
2012, 每一个软件工程师必须做的11件事 -
mynetstudy:
用导出不就可以了吗
递归删除SVN工作目录下的.svn目录
最近 Debian 的 testing 版本已经将 PHP 由 5.2.x 升级 为 5.3.1。PHP 5.3 开始,为了更好的向 PHP 的未来版本(PHP6) 过渡,将未来不再支持的函数标记为 DEPRECATED。在代码中使用这些函数,将毫不留情的在页面中显示警告信息:“使用了过时的函数…”,诸如此类。
那么如何面向未来,让现有的 PHP 程序平滑的向下一代 PHP 引擎过渡呢?
配置文件迁移
PHP 5.3 开始,配置文件 php.ini 中的一些配置将会在 PHP 执行时显示过时警告,这些配置将在 PHP6中不再存在,相关功能也将关闭。
1. define_syslog_variables
2. register_globals
3. register_long_arrays
4. safe_mode
5. magic_quotes_gpc
6. magic_quotes_runtime
7. magic_quotes_sybase
函数迁移
涉及到的主要的函数迁移如下:
删除函数 define_syslog_variables 引用
* 删除对函数 define_syslog_variables 的引用
* 将变量 $LOG_ERR, $LOG_USER 等用常量 LOG_USER, LOG_USER, … 替代
ereg, eregi 函数用 preg_match 函数替代
* 这几个函数的函数声明
int ereg ( string $pattern , string $string [, array &$regs ] )
int eregi ( string $pattern , string $string [, array &$regs ] )
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )
* 虽然三者的第一个参数都是字符串,表示一个正则表达式。但是 preg_match 用的是 PCRE(Perl 兼容的正则表达式语法):正则表达式的两端用一个符号做边界,如 “/pattern/” 或者 “#pattern#”
* eregi 是乎略大小写的匹配,转换为 preg_match,第一个参数,用PCRE的参数来乎略大小写,如:”/pattern/i” 或者 “#pattern#i”
* 两者的第三个参数返回的匹配的数据结构不同。ereg 的第三个参数在调用结束后,返回的是一个字符串数组,分别为完整匹配字串和各个子匹配字串。preg_match 返回的是二维数组,相当于 ereg 的字串数组中的字串在 preg_match 是一个数组,分别保存匹配值以及匹配位置。
* 如果要进行多次匹配,PHP 提供了 preg_match_all 函数,其第三个参数的返回值则是一个三维数组;
ereg_replace, eregi_replace 函数用 preg_replace 函数或者 str_replace 函数来替代
* 和前面的 ereg 替换为 preg_match 类似,第一个参数要进行转换,头尾增加一个符号,如:”/pattern/” 或者 “#pattern#”, …
* eregi_replace 到 preg_replace 的替换,在第一个参数的后面增加正则表达式参数。如:”/pattern/i” 或者 “#pattern#i”, …
* 如果 ereg_replace 的第一个参数不是正则表达式,可以用 str_replace 直接来替换。
split, spliti 函数用 explode 或则 preg_split 函数替代
* split 切分字符串,如果无须用到正则表达式,使用 explode 替换是最好不过,速度最快
* 对于使用正则表达式切分字串,则使用 preg_split 函数替代。替代过程和 ereg/ereg_replace 类似,只是在第一个正则表达式参数中做文章,将 split 的正则表达式前后加上一个 PCRE 的分隔符号。
* split 转换为 explode 最容易出错。例如:
o split(“\ “, $string) 不能替换为 explode(“\ “, $string),而是替换为 explode(” “, $string);
o split(“\.”, $string) 不能替换为 explode(“\.”, $string),而是替换为 explode(“.”, $string);
o split(“\/”, $string) 不能替换为 explode(“\/”, $string),而是替换为 explode(“/”, $string);
mysql_db_query 函数用 mysql_select_db 和 mysql_query 函数替代
* mysql_db_query 在未来版本不再支持
* 将其转换为两次调用,分别是用 mysql_select_db 选择数据库,用 mysql_query 来执行 SQL 查询
mysql_escape_string 函数用 mysql_real_escape_string 函数替代
* mysql_escape_string 未来版本不再支持
* 使用 mysql_real_escape_string 替代
session_register 函数,session_unregister,session_is_registered 函数用 $_SESSION 全局变量替代
* 这三个 session 相关函数未来不再支持
* 其功能相当于直接操作全局数组 $_SESSION。可以直接向数组中赋值或者执行相应的 unset 即可实现相关功能
函数引用传参的过时语法
如果在函数调用时使用引用传参,会引发警告:
Call-time pass-by-reference has been deprecated
解决方法:
* 在函数声明部分,对需要引用传参的参数用 & 符号标识。如:
function some_func( $var, &$ref_var )
{
。。。
}
* 调用该函数时,不要再对引用传参的参数添加 & 修饰符,因为函数声明中已经声明过了。例如:
some_func("user name", $email);
在代码中查抄过时函数
下面这个脚本可以用于在代码树中查找过时的 PHP 函数
#!/bin/sh
OPTS="-rHw"; verbose=0
while [ $# -gt 0 ]; do
case $1 in
-v)
verbose=1; shift ;;
-q)
verbose=0; shift ;;
-*)
OPTS="$OPTS $1"; shift ;;
*)
break; ;;
esac
done
if [ $# -eq 0 ]; then
echo "Usage $0 [-v] "
exit 1
fi
[ $verbose -eq 0 ] && OPTS="$OPTS -l"
DEPRECATED="call_user_method call_user_method_array define_syslog_variables
dl set_magic_quotes_runtime magic_quotes_runtime
set_socket_blocking sql_regcase
mysql_db_query mysql_escape_string
session_register session_unregister session_is_registered
eregi? eregi?_replace spliti?"
OPTS="$OPTS --include=*.inc --include=*.php --include=*.php5"
for item in $DEPRECATED; do
echo "##### find deprecated item: $item in $1: #####"
grep $OPTS -E "$item\s*$" $*
grep $OPTS -E "$item\s*\(" $*
echo ""
done
发表评论
-
Magento模板及布局文件中引用Static Block的方法
2013-03-21 10:25 1260Static Block是Magento提供的非常实用的一种 ... -
PHP ORM框架与简单代码实现
2013-02-18 12:37 1399对象关系映射(Object Relational Mappi ... -
php.ini安全配置详细解释
2013-01-24 11:28 1901PHP本身再老版本有一些问题,比如在 php4.3.10和p ... -
关于PHP学习
2012-11-02 21:54 7931.首先看了PHP的源码API ... -
Zend Framework的DB处理-表关联(转载)
2012-04-24 10:35 1129介绍: 在RDBMS中,表之间有着各种 ... -
浅谈Zend Framework, CodeIgniter与Kohana
2012-04-13 17:11 1180抛砖引玉,这三份框架 我都花了一定的时间精力去了解,根据 ... -
浅谈Zend Framework, CodeIgniter与Kohana
2012-04-13 17:10 14<div id="article_conten ... -
22个开源的PHP框架
2012-02-06 12:40 945http://coolshell.cn/articles/10 ... -
isolated 十个超级有用的PHP代码片段
2012-01-31 15:50 8751. 发送短信 调用 TextMagic API。 // ... -
Drupal 主页定制:定制个性的drupal 主页<front>
2011-11-24 23:48 1034默认主题就是列表格式,像blog一样,一般做企业展示性的网站, ... -
drupal6.x中创建新的主题模版和区域(Regions)
2011-11-24 23:27 15592011-01-02 18:29 ... -
9大最有潜力PHP开源项目:PHP FOR Android开发居首
2011-11-10 11:21 1506PHP的开源世界可谓相当 ... -
Comparing PHP Frameworks ( Symfony, CakePHP, YII and CodeIgniter)
2011-06-30 18:13 1529转自 http://karim-ouda.blogspot.c ... -
A Good PHPer
2011-01-18 16:35 7331.首先看了PHP的源码API函数,对于许多口水仗的争论一笑而 ... -
PHP实现html标签补全
2011-01-18 15:37 1151PHP实现html标签补全 作者:朦朧中的罪惡 | ... -
Comparison of web application frameworks
2011-01-18 15:29 991From Wikipedia, the free encycl ... -
搭建Eclipse PDT开发CakePHP的环境
2011-01-14 14:20 2641搭建Eclipse PDT开发CakePHP ... -
Developing custom PHP extensions PECL Tutorials 从源程序编译 DLL
2011-01-04 17:34 1769想了很久怎么给这篇文 ... -
国外主流PHP框架比较-CodeIgniter、CakePHP、ZendFramework、Symfony
2010-12-01 13:16 1214最近简单的使用了目前在国内用的比较多的几个主流国外PHP框架( ... -
php5.3不支持eregi()函数了
2010-10-12 13:52 8637写正则的时候可能会碰到用ereg()时出现错误,如:Depre ...
相关推荐
purl, Purl是一个面向 PHP 5.3 的简单的面向对象的URL操作库 PurlPurl是一个面向 PHP 5.3 的简单的面向对象的URL操作库 安装建议的安装方法是通过 Composer:composer require jwage/purl使用选择器创建
项目中要用到zend Optimizer,但是目前只支持php5.2,Ubuntu默认安装的php版本为5.3,找了好多 方法,终于借助下面这篇文章的方法成功的安装了5.2及5.3两个版本的php Although Drupals 7+ run smoothly on PHP 5.3, ...
php5.3版本开发环境源代码
php5.3版本的官方开发文档。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
php5.3X64位支持win2008r2
本人资源中还有很多关于php开发的软件 源码 工具 php扩展等等,希望可以帮到你例如 Linux.chm 成就linux高手 php php-5.4.9.tar.gz php-5.3.19.tar.gz jquery1.8.0 chm 中文手册 jquery1.7.1.chm 中文手册 ...
最新的版本。可以实现Windows环境下php5.3+apache配置 。
php_imagick-3.1.2-5.3-nts-vc9-x86 适用于php-5.3-nts-vc9-x86
php5.3 64位WampServer 找了很久才找到
php5.3安装版,win32位,线程安全
php5.3版本的wampserver,可以兼容win10
memcache用于PHP5.3非线程版本,好些都是单独版本,全版本的不好找喔。
Windml5.3开发指导书
基于Laravel5.3开发的考勤系统,毕业设计 基于Laravel5.3开发的考勤系统,毕业设计 基于Laravel5.3开发的考勤系统,毕业设计 基于Laravel5.3开发的考勤系统,毕业设计 基于Laravel5.3开发的考勤系统,毕业设计 基于...
PHP5.3中文手册,2011年修订的中文帮助文档手册,
(积分会自动改,需要的留言)phpemail 适用php5.3版本,目前github上的phpemail对于5.3好像有不少问题。 实例(含代码):https://blog.csdn.net/github_38854224/article/details/91490084
php5.3版本的php_solr.dll哦,很难找到的哦
windows下php5.3 redis扩展 php_redis.dll
x64 php_apc.dll for php5.3.x
PHP_5.3_与_PHP_5.2_开发区别和新特性