百优亿诚设计出品
扫描关注网站建设微信公众账号

扫一扫微信二维码

php从5.2.x升级到5.3.2.出来问题及解决方案

百优亿诚2015-10-24技术笔记

php5.3 不支持 session_register() 此函数已启用的解决方法

php从5.2.x升级到5.3.2.出来问题了。有些原来能用的程序报错了。
报错内容是

Deprecated: Function session_register() is deprecated


查了一下是5.3这个session_register就不让用了,降回去?不爽。
搜了一把,有个解决方法是写一个函数


复制代码 代码如下:

<?php 
// Fix for removed Session functions 
function fix_session_register(){ 
function session_register(){ 
$args = func_get_args(); 
foreach ($args as $key){ 
$_SESSION[$key]=$GLOBALS[$key]; 
} 
} 
function session_is_registered($key){ 
return isset($_SESSION[$key]); 
} 
function session_unregister($key){ 
unset($_SESSION[$key]); 
} 
} 
if (!function_exists('session_register')) fix_session_register(); 
?>

 

查了一下出现这个问题的地方不多,找到了另外一个方法,直接

session_register( “abc” ) ;


改成

$_SESSION['abc'] = null;


即可

session在php5.3中的变化

在php5.3中运行书中代码会有如下提示:

Function session_is_registered() is deprecated in
Function session_register() is deprecated in

意思是说这两个函数是不赞成的,弃用的。
下面是php官方手册上的代码,注释部分已经说明了不赞成用session_register()


复制代码 代码如下:


<?php
// Use of session_register() is deprecated 不赞成用session_register()
$barney = "A big purple dinosaur.";
session_register("barney");

// Use of $_SESSION is preferred, as of PHP 4.1.0 首选 $_SESSION
$_SESSION["zim"] = "An invader from another planet.";

// The old way was to use $HTTP_SESSION_VARS
$HTTP_SESSION_VARS["spongebob"] = "He's got square pants.";
?>

 

并且有如下警告及提示:
Warning
This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.
警告:这个函数在php5.3中已不推荐使用,在php5.4中已被移除。

Note:
If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used, use isset() to check a variable is registered in $_SESSION.
提示:如果 使用了$_SESSION,就用isset()函数来检查。

Caution
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered() and session_unregister().

 

 

 

 

Function eregi is deprecated (解决方法)
在php升级到php5.3之后后,在使用的过程经常发现有的程序会出现Function eregi() is deprecated 的报错信息。是什么原因呢?
这是因为php5.3中不再支持eregi()函数,而使用preg_match()函数替代。
解决的方法是:将eregi()函数替换成preg_match() 函数。
 if(eregi('^test',$file))
可以替换为
if(preg_match('/^test/i',$file))
 
————-
PHP 5.3.0 之後的 regex, 希望使用 PCRE 的規格, POSIX Regex 都不建議使用了(統一 Regex, 避免規格太多?).
所以下述是不建議使用的 Function (POSIX), 與建議替換成的 Function (PCRE) 列表, 詳可見: PHP:
Differences from POSIX regex
* POSIX → PCRE
* ereg_replace() → preg_replace()
* ereg() → preg_match()
* eregi_replace() → preg_replace()
* eregi() → preg_match()
* split() → preg_split()
* spliti() → preg_split()
* sql_regcase() → No equivalent
* 需要 regex 的 split, 可用 preg_split() 代替
* 不需要 regex, 只要要快速分割固定的字串, 可用 explode() 代替. (速度會比需要 regex 的快很多)

 

文章关键词
北京网站建设
北京网站制作
北京网页设计