背景
最近开了一个新的系统,直接用的之前的代码,新系统中升级了php版本,改用php7,之前用的是php5.6,然后一顿操作,代码copy过来,环境打开,然后,然后,然后就一片空白,傻眼了,最开始以为是配置问题,然而并不是,试了另一个系统php7发现那个是用的smarty模板引擎,而现在这个系统是tpc,然后就一路断点找问题。最后问题找到了,
$template = preg_replace("/$varRegexp/es", "tpc_addquote('<?=\\1?>')", $template);
这条命令的结果居然是空,百度发现问题在preg_replace 的/e这里。
解决方案
说一下解决方案,因为不再支持了所以需要使用替代方法,改用preg_replace_callback替换就好。
$template = preg_replace_callback(
"/$varRegexp/s",
function ($r) use ($lang) {
return tpc_addquote('<?=' . $r[1] . '?>');
},
$template
);
好记性不如烂笔头
当找到这个问题的时候想起之前遇到的一个问题,之前的另一个系统中升级后发现db类报错了,当时就是解决了问题,并不知道为什么,想起是不是也是这个问题,找到修改记录。原来如此~~
//更改前
$joinStr = preg_replace("/__([A-Z_-]+)__/esU",C("DB_PREFIX").".strtolower('$1')",$joinStr);
//更改后
$joinStr = preg_replace_callback("/__([A-Z_-]+)__/",
function ($matches) {
return '_' . strtolower($matches[0]);
},$joinStr);
再记录另一个问题
当时使用到phpexcel
然后到php7中就报错,phpexcel/calculation/functions.php 中581行的break
直接上代码吧