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到了嗎?