Thinkphp这个框架因为年头比较久了, 老式的3.0框架代码很多不能正确兼容>=5.6以上的版本。比较突出的就是Db.class.php这个文件里的正则。
php7.1之后的preg_replace函数会报错The /e modifier is no longer supported, 怎么解决? 这里笔者举个例子说明:
先找到这段代码:
protected function parseJoin($join) { ... //将__TABLE_NAME__这样的字符串替换成正规的表名,并且带上前缀和后缀 $joinStr = preg_replace("/__([A-Z_-]+)__/esU", C("DB_PREFIX") . ".strtolower('$1')", $joinStr); }
把$joinStr变量这一行改成下方这个样子
$joinStr = preg_replace_callback("/__([A-Z_-]+)__/sU", function ($match) { return C("DB_PREFIX") . strtolower($match[1]); }, $joinStr);
错误解决。说一大堆不如直接看代码, 你Get到了吗?