剛才在遷移一個(gè)客戶企業(yè)網(wǎng)站的時(shí)候發(fā)現(xiàn)有報(bào)錯(cuò)提示"preg_replace()"函數(shù)錯(cuò)誤,后面一長(zhǎng)長(zhǎng)的字符串我就沒(méi)有記錄下來(lái)總之就是這個(gè)報(bào)錯(cuò)。我看這個(gè)企業(yè)網(wǎng)站客戶是使用的很早的ECSHOP CMS程序做的,一般我們都知道的企業(yè)網(wǎng)站只要保持正常的可以能打開(kāi),基本不需要?jiǎng)印?/p>
但是目前技術(shù)也在增進(jìn),服務(wù)器配置的軟件也在提高。比如我們目前是使用的PHP7.4,至少也要使用PHP7.3,但是我估計(jì)是函數(shù)在PHP版本兼容問(wèn)題。后來(lái)我查詢資料發(fā)現(xiàn),這個(gè)"preg_replace"只有在PHP5.6及以下才兼容的。
這里我想到三個(gè)解決方案:
第一、更換程序
我個(gè)人建議是讓業(yè)務(wù)去找客戶談一談,是否這么多年網(wǎng)站也不適應(yīng)時(shí)代需求,是否可以換一個(gè)自適應(yīng)的,以及當(dāng)前美觀度習(xí)慣的。如果這樣的話,我們可以給他重新做一個(gè)網(wǎng)站,兼容PHP最新版本。
第二、修改程序
這里我們也可以看到,ECSHOP看到類似問(wèn)題還是很多的。
includes/cls_template.php
在這個(gè)文件中找到:
return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
然后替換成:
return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);
應(yīng)該是可以解決的,這里我找到解決辦法是可以用的。
第三、搭建適配環(huán)境
我們單獨(dú)用一臺(tái)服務(wù)器搭建PHP較低版本的,然后給客戶單獨(dú)存放。這樣就顯得浪費(fèi)服務(wù)器資源。
這個(gè)是目前可以解決的辦法,等業(yè)務(wù)問(wèn)問(wèn)客戶是否更換網(wǎng)站,我們建議他更新適應(yīng)當(dāng)前版本PHP最新版本比較好,效率也高。