在php5.3环境下运行程序无法正常使用,提示“Deprecated: Function eregi() is deprecated in ……”或“Deprecated: Function ereg_replace() is deprecated in ……”。问题根源是php中有两种正则表示方法,一个是posix,一个是perl,php6打算废除posix的正则表示方法所以后来就加了个preg_match。从php5.3开始,以上的版本不支持 ereg() 函数,而是使用 preg_match() 函数;不支持 ereg_replace() 函数,而使用 preg_replace() 函数。
简单的解决方法是在 ereg 或 ereg_replace() 前加个过滤提示信息符号即可。如:把ereg()变成@ereg()。这样屏蔽了提示信息,但根本问题还是没有解决。
最好的解决方法是:将不支持的函数修改为支持的函数即可。
例如:
Deprecated: Function eregi() is deprecated in D:\www\oscommerce\catalog\includes\classes\language.php on line 87
那么,将87行的
if(eregi(‘^(‘ . $value . ‘)(;q=[0-9]\\.[0-9])?$’, $this->browser_languages[$i])
改为:
if(preg_match(‘/^(‘ . $value . ‘)(;q=[0-9]\\.[0-9])?$/i’, $this->browser_languages[$i])
再例如:
Deprecated: Function ereg_replace() is deprecated in C:\wamp\www\includes\functions\general.php on line 61
那么,将61行的
$string = ereg_replace(‘ +’, ‘ ‘, trim($string));
改为:
$string = preg_replace(‘{ +}’, ‘ ‘, trim($string));
如此类推,其它类似的错误也可以按照上面两个函数的语法来做修改。
特别提醒:posix与perl的很明显的表达区别就是是否加斜杠,所以与ereg相比,后者在正则的前后分别增加了两个”/”符号,不能缺少。