preg_replace()错误

smq 2014-04-14 08:52:49
各位高手,我没用过PHP,现在只是用OpenLDAP时用phpLDAPadmin的工具,结果在登陆后出现以下问题,请问大家应该如何修改一下呢?

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /usr/local/httpd/phpldapadmin/lib/functions.php on line 2569

我查看了一下那个文件的2569行如下:
$a[$key] = preg_replace('/\\\([0-9A-Fa-f]{2})/e',"''.chr(hexdec('\\1')).''",$rdn);

我从网上搜索了下,按照网上说的修改如下:
$a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})',function($m) {return ''.chr(hexdec($m[1])).''; },$rdn);
但是不对,这里不报错了,别的地方就出错了,由于我没有用过PHP,所以也不知具体原因


请高手知道下,那行应该如何修改?谢谢大家了
...全文
612 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flutesing1 2014-06-13
  • 打赏
  • 举报
回复
$pattern = array( '/<!--[^>|\n]*?({.+?})[^<|{|\n]*?-->/', // 替换smarty注释 '/<!--[^<|>|{|\n]*?-->/', // 替换不换行的html注释 '/(href=["|\'])\.\.\/(.*?)(["|\'])/i', // 替换相对链接 '/((?:background|src)\s*=\s*["|\'])(?:\.\/|\.\.\/)?(images\/.*?["|\'])/is', // 在images前加上 $tmp_dir '/((?:background|background-image):\s*?url\()(?:\.\/|\.\.\/)?(images\/)/is', // 在images前加上 $tmp_dir '/{nocache}(.+?){\/nocache}/ise', //无缓存模块 ); $replace = array( '\1', '', '\1\2\3', '\1' . $tmp_dir . '\2', '\1' . $tmp_dir . '\2', "'{insert name=\"nocache\" ' . '" . $this->_echash . "' . base64_encode('\\1') . '}'", ); return preg_replace($pattern, $replace, $source); 这样的怎么修改成 preg_replace_callback
phpxiazai01 2014-04-16
  • 打赏
  • 举报
回复
/\\\([0-9A-Fa-f]{2})/正则错了吧,括号是字符串里面的还是写正则用的括号 /\\([0-9A-Fa-f]{2})/或者/\\\([0-9A-Fa-f]{2}\)/
smq 2014-04-14
  • 打赏
  • 举报
回复
引用 1 楼 microlab2009 的回复:
由于方法preg_replace()为PHP 5.5.x 中废弃的特性,官方建议需要在代码中将preg_replace()替换为函数preg_replace_callback,可以问题解决。 是你的php版本过高
我也搜到时这么说的,我换成5.3.28还是不行
smq 2014-04-14
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
$a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', function($m) {return chr(hexdec($m[1])); }, $rdn);
修改后又报下面的错误 Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed' in /usr/local/httpd/phpldapadmin/lib/functions.php:615 Stack trace: #0 /usr/local/httpd/phpldapadmin/lib/functions.php(615): serialize(Array) #1 /usr/local/httpd/phpldapadmin/lib/functions.php(184): error('E_WARNING: preg...', 'error', NULL, true, true) #2 [internal function]: app_error_handler(2, 'preg_replace_ca...', '/usr/local/http...', 2572, Array) #3 /usr/local/httpd/phpldapadmin/lib/functions.php(2572): preg_replace_callback('/\\([0-9A-Fa-f]...', Object(Closure), 'dc=gs') #4 /usr/local/httpd/phpldapadmin/lib/functions.php(2525): dn_unescape(Array) #5 /usr/local/httpd/phpldapadmin/lib/Tree.php(135): pla_explode_dn('dc=gs,dc=com') #6 /usr/local/httpd/phpldapadmin/lib/Tree.php(173): Tree->indexDN('dc=gs,dc=com') #7 /usr/local/httpd/phpldapadmin/lib/Tree.php(62): Tree->addEntry('dc=gs,dc=com') #8 /usr/local/httpd/phpldapadmin/lib/page.php(227): Tree::getInstance(1) #9 /usr/local/httpd/phpldapadmin/lib/page.php(418): pag in /usr/local/httpd/phpldapadmin/lib/functions.php on line 615 这个不是我编写的程序,是开源 phpLDAPadmin中的
xuzuning 2014-04-14
  • 打赏
  • 举报
回复
$a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', function($m) {return chr(hexdec($m[1])); }, $rdn);
嘻哈大咖秀 2014-04-14
  • 打赏
  • 举报
回复
由于方法preg_replace()为PHP 5.5.x 中废弃的特性,官方建议需要在代码中将preg_replace()替换为函数preg_replace_callback,可以问题解决。 是你的php版本过高

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧