前一段時(shí)間幫一個(gè)朋友修改用DZ程序做的網(wǎng)站的模板的時(shí)候出現(xiàn)了問(wèn)題,就是網(wǎng)站突然出現(xiàn)“內(nèi)部錯(cuò)誤,無(wú)法顯示此內(nèi)容”問(wèn)題。大家都知道DZ是完全把主體程序和前端模板拆開(kāi)的,這一點(diǎn)也可以說(shuō)是一套優(yōu)秀程序的一個(gè)特征,這一點(diǎn)全球知名的開(kāi)源程序WordPress也是如此。而DZ還有一個(gè)易用的功能就是模塊DIY功能,這個(gè)功能可以讓很多連HTML都不懂的站長(zhǎng)朋友制作自己個(gè)性化的模塊。
然而出現(xiàn)這個(gè)問(wèn)題基本上網(wǎng)站的一切都無(wú)法操作,在DIY點(diǎn)開(kāi)諸如數(shù)據(jù)、樣式、屬性等所有選項(xiàng)都有報(bào)錯(cuò)。而這時(shí)候我朋友有總在問(wèn)我搞定了沒(méi),因?yàn)榇饝?yīng)他在規(guī)定的時(shí)間里幫他解決首頁(yè)的模板,但遇到這個(gè)問(wèn)題我都不敢跟他說(shuō),因?yàn)槲乙矝](méi)有絕對(duì)的把握說(shuō)這個(gè)東西不是我造成的,雖然在我看來(lái)操作前端的樣式的時(shí)候不可能造成這種錯(cuò)誤,但在實(shí)際當(dāng)中一切意想不到的的事情都可能發(fā)生。
于是我只能硬著頭皮去自己搜索答案,在網(wǎng)上搜索了十多分鐘,發(fā)現(xiàn)大多數(shù)人提這樣的問(wèn)題都沒(méi)有什么結(jié)果,回答最多的就是更新緩存之類(lèi)的,似乎這個(gè)程序出現(xiàn)所有問(wèn)題都是沒(méi)有更新后臺(tái)緩存造成的,當(dāng)然DZ的很多時(shí)候都需要更新后臺(tái)緩存,特別是修改了東西讓其生效的時(shí)候。
搜索了一圈也沒(méi)解決問(wèn)題,雖然有很多答案得到了最終的解決方案,但那些情況跟我的實(shí)際并不相符,因?yàn)槲以诔霈F(xiàn)故障前后只是操作了CSS,結(jié)果朋友突然說(shuō)我?guī)湍阈薷牧薱onfig中的驗(yàn)證IP功能免得你進(jìn)后臺(tái)的時(shí)候總是說(shuō)跳出登陸。結(jié)果我讓他用備份的這個(gè)文件替換就解決問(wèn)題。
我從來(lái)都不會(huì)為解決問(wèn)題而去解決問(wèn)題,我總會(huì)在自己解決后總結(jié)為什么會(huì)出現(xiàn)這個(gè)問(wèn)題。于是我還特意保留了故障期間的那些文件跟現(xiàn)在正常的對(duì)比,分析了新的問(wèn)題??偨Y(jié)網(wǎng)上和自己新琢磨出來(lái)的做一個(gè)總結(jié),造成這個(gè)問(wèn)題最常見(jiàn)的因素有如下幾點(diǎn),當(dāng)然以后可能有更多的新問(wèn)題。
一、修改文件時(shí)直接用記事本打開(kāi),造成多余的空格,導(dǎo)致程序不能識(shí)別XML文件。
用過(guò)DZ那個(gè)程序的朋友都知道,在程序中很多地方都使用了XML技術(shù),我們插件和模板的安裝文件都是寫(xiě)在XML文件中,然后經(jīng)過(guò)內(nèi)部函數(shù)機(jī)制調(diào)用執(zhí)行。還有在模板DIY過(guò)程中生成的文件其實(shí)也是XML的,比如我們?cè)贒IY后導(dǎo)出的文件就是這種格式的。我的這個(gè)朋友就是在修改配置文件config 的時(shí)候直接在ftp中打開(kāi)造成文件中出現(xiàn)多余空格,造成不能識(shí)別xml造成這種錯(cuò)誤。因?yàn)槲液髞?lái)繼續(xù)恢復(fù)到異常狀態(tài)打開(kāi)錯(cuò)誤報(bào)告,發(fā)現(xiàn)上面有一截報(bào)錯(cuò)代碼就是xml包含的,而下部分是我們正常使用的時(shí)候那部分,只是格式很混亂。解決方案就是用DW之類(lèi)專(zhuān)門(mén)編寫(xiě)代碼的工具恢復(fù)那些文件正常的格式。
二、修改XML文件錯(cuò)誤,導(dǎo)致無(wú)法識(shí)別。
在DZ中很多模板的首頁(yè)都是用DIY制作或者使用了大量的DIY,有時(shí)候我們修改模板上面的信息的時(shí)候?yàn)榱耸∈戮筒皇侨ヒ粋€(gè)個(gè)框架上編輯修改名稱了,而是先導(dǎo)出xml,然后再統(tǒng)一修改它。結(jié)果可能使用記事本或者其他不是專(zhuān)門(mén)編寫(xiě)代碼的工具造成格式混亂,也可能因?yàn)橐粫r(shí)失誤把標(biāo)簽的封閉符號(hào)給刪除了。都會(huì)造成如第一種情況中所出現(xiàn)的那樣無(wú)法識(shí)別的問(wèn)題,而且很多時(shí)候這樣的文件能順利導(dǎo)入程序,但導(dǎo)入后就會(huì)發(fā)生這樣致命的錯(cuò)誤。解決的方法就是先清空錯(cuò)誤的導(dǎo)入,然后經(jīng)過(guò)合適的工具及正確的方法修改xml使得其沒(méi)有錯(cuò)誤再導(dǎo)入。
三、在DIY狀態(tài)下導(dǎo)入了與程序本身沖突或者錯(cuò)誤的JS。
在DZ內(nèi)部已經(jīng)自帶了很多非常實(shí)用的JS特效,比如幻燈片切換和滾動(dòng)等等,這些特效只需要一個(gè)屬性值本來(lái)就可以直接調(diào)用,而且按照這種內(nèi)置功能實(shí)現(xiàn)的特效執(zhí)行效率會(huì)很高。但很多技術(shù)上不怎么了解的站長(zhǎng)往往喜歡從網(wǎng)上收集一些JS代碼,也許那些代碼在單獨(dú)執(zhí)行的時(shí)候確實(shí)沒(méi)有任何錯(cuò)誤,但放在DZ程序中就會(huì)出現(xiàn)沖突甚至如這里說(shuō)的這個(gè)致命的錯(cuò)誤,比如知名的JS框架之一jQuery默認(rèn)的$就會(huì)與DZ沖突,必須經(jīng)過(guò)修改后才能正常使用。其實(shí)出現(xiàn)這類(lèi)故障的時(shí)候,往往直接在前臺(tái)清空DIY都是無(wú)效的,最好的解決方案就是去數(shù)據(jù)庫(kù)找到模板頁(yè)面數(shù)據(jù)的存檔表pre_common_diy_data DIY刪除最近加入進(jìn)去的數(shù)據(jù)記錄,然后重新來(lái)制作當(dāng)前頁(yè)面。
四、無(wú)解詭異的緩存問(wèn)題。
這個(gè)問(wèn)題如果說(shuō)起來(lái)會(huì)讓人覺(jué)得廢話一樣,但我在此前確實(shí)就這么解決過(guò)好幾次出現(xiàn)這種錯(cuò)誤的問(wèn)題。其實(shí)我認(rèn)為并不奇怪,因?yàn)镈Z是一套充分使用緩存機(jī)制的程序,比如我們的前端所看到的很多JS和CSS等都是先通過(guò)模板中的文件寫(xiě)入Cache中,然后再讓前端讀取執(zhí)行的。很多時(shí)候經(jīng)過(guò)前面幾種方式修正了錯(cuò)誤,但我們?cè)谇岸瞬榭吹臅r(shí)候依然是錯(cuò)誤的,這時(shí)候就得考慮緩存問(wèn)題,而且這種問(wèn)題多出現(xiàn)重新配置的服務(wù)器。解決的方法就是重啟IIS或者 apache之類(lèi)的web服務(wù)器或者干脆重新開(kāi)機(jī),另外就是檢查Cache目錄是否寫(xiě)入,因?yàn)槲覀兊母谋仨氉屍湓趫?zhí)行的時(shí)候?qū)懭刖彺娌攀巧У摹?/P>
以上幾種情況是很多人都出現(xiàn)過(guò)的問(wèn)題,也都是親身所經(jīng)歷的,只是第一種情況是我最近一次所遇到的。雖然一般來(lái)講只要是問(wèn)題就有解決的方法,但我覺(jué)得有時(shí)候這樣的問(wèn)題會(huì)造成我們浪費(fèi)大量不必要的時(shí)間。最后建議新手朋友不要在自己完全不了解相關(guān)知識(shí)的時(shí)候去隨意修改,也希望大家不要圖一時(shí)方便去直接修改文件以免造成難以發(fā)現(xiàn)原因的故障,當(dāng)然最保險(xiǎn)的方式還是在修改前備份我們寶貴的數(shù)據(jù)。
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄