中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

關(guān)于織夢(mèng)DEDECMS二次開(kāi)發(fā)的一些個(gè)人經(jīng)驗(yàn)之談

1970-01-01    來(lái)源:

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

  如果您想從此貼直接獲得一些有用的插件、模塊、或代碼,請(qǐng)繞道~~

  “授人以魚(yú)”還是“授人以漁”,此貼是后者,希望對(duì)你有所幫助……

  * 提示:如果你是PHP編程有比較深入經(jīng)驗(yàn)了,請(qǐng)只看重點(diǎn)內(nèi)容即可,其它跳過(guò)。

  如果你是PHP初學(xué)者,請(qǐng)仔細(xì)閱讀所有文字,別嫌繁瑣,對(duì)你提高有好處!

  1、執(zhí)行header()前輸出的空格、空行、任何字符,都會(huì)導(dǎo)致header()跳轉(zhuǎn)失效!

  前幾天,幫一個(gè)客戶做了一些修改,把代碼發(fā)給對(duì)方之后,對(duì)方后來(lái)反映說(shuō)“后臺(tái)欄目查看文章列表不行了”,我去查看果真如此,點(diǎn)擊了欄目后面的“內(nèi)容”進(jìn)去,一片空白!這一點(diǎn)我當(dāng)時(shí)百思不得其解,因?yàn)槲易鲂薷牡拇a,和這個(gè)功能完全沒(méi)有關(guān)系!于是不得已,只好一步步做跟蹤調(diào)試:

  首先要排查的是語(yǔ)法錯(cuò)誤(如果當(dāng)php.ini里設(shè)置是不顯示任何錯(cuò)誤的話,語(yǔ)法錯(cuò)也會(huì)導(dǎo)致一片空白),這個(gè)文件是dede/catalog_do.php(怎么知道是這個(gè)文件呢,很簡(jiǎn)單,在那個(gè)一片空白的頁(yè)面上,點(diǎn)右鍵,看屬性,就有地址URL和傳遞的參數(shù)),我把一行die("aa"); 放在了代碼第一行,這個(gè)做法就可以測(cè)試有無(wú)語(yǔ)法,因?yàn)檎Z(yǔ)法錯(cuò)不單可以發(fā)生在catalog_do.php文件本身,還可以發(fā)生在 catalog_do.php文件所引用的文件里(包括這些文件里再引用的任何一級(jí)文件里),所以如果這個(gè)第一行die("aa"); 也不能執(zhí)行,就必然是語(yǔ)法錯(cuò)。因?yàn)槟茌敵鯽a,也就是說(shuō)語(yǔ)法沒(méi)有錯(cuò),就必定是某種程序上的邏輯錯(cuò)。

  然后進(jìn)一步尋找邏輯錯(cuò)誤發(fā)生的文件,這就需要跟蹤代碼的所執(zhí)行到的地方,由于沒(méi)有任何提示,也還是利用die("aa"); ,把這一行往下挪到catalog_do.php文件的include、require等語(yǔ)句之后,如果不能執(zhí)行,說(shuō)明在include、require 所引用的文件里,代碼執(zhí)行就停止了,反之說(shuō)明那些文件執(zhí)行是正常的。這一步,依然能顯示aa,說(shuō)明錯(cuò)誤是發(fā)生在catalog_do.php文件里(如果是發(fā)生在其他所引用的文件里,就用此法打開(kāi)那些文件去如是調(diào)試)

  然后再此文件里一步步尋找發(fā)生錯(cuò)誤的具體代碼段,首先要看鏈接此文件時(shí)候的參數(shù)(在那個(gè)一片空白的頁(yè)面上,點(diǎn)右鍵,看屬性,就有地址URL和傳遞的參數(shù)),而點(diǎn)擊“內(nèi)容”時(shí)鏈接此文件的URL為 catalog_do.php?cid=3&dopost=listArchives(它的意思,我們可以猜測(cè)它c(diǎn)id是欄目ID,而最重要的是 dopost=listArchives這個(gè)參數(shù),因?yàn)槲覀冊(cè)赾atalog_do.php文件里,可以看到接下來(lái)的代碼,就是一連串的if (dopost=="...."){ }else if(dopost=="...."){ }else.....的判斷,它就是讓程序運(yùn)行,根據(jù)過(guò)來(lái)的dopost=參數(shù)的不同,進(jìn)入不同的處理),好,我們就直接找到if (dopost=="listArchives"){ 這里,把die("aa"); 放到緊接著它的第一行,看看還能否輸出aa,如果可以輸出,說(shuō)明程序正確進(jìn)入了目標(biāo)程序段,否則就說(shuō)明dopost=="listArchives"這個(gè)判斷沒(méi)有達(dá)到預(yù)期的效果(如果是這個(gè)情況,你就要好好對(duì)照剛才的URL和這個(gè)dopost=="listArchives",有沒(méi)有寫(xiě)錯(cuò)參數(shù)名、大小寫(xiě)有沒(méi)有弄錯(cuò)了,還有就是dopost值有沒(méi)有在前面就被改變了,最常見(jiàn)的錯(cuò)就是類似寫(xiě)成了dopost=="listarchives",或者在前頭某個(gè)判斷里寫(xiě)成了dopost="..."),好,依然能輸出aa,說(shuō)明程序也進(jìn)來(lái)這里了。

  然后繼續(xù)尋找發(fā)生錯(cuò)誤的代碼行,繼續(xù)挪動(dòng)die("aa"); 的玉步,每次挪動(dòng)完,刷新那個(gè)空白頁(yè)面,看看能否輸出aa(這里有技巧,想快,就不要逐行挪動(dòng),而是利用折半查找,或者在關(guān)鍵代碼前后插入,這個(gè)就需要比較強(qiáng)的代碼閱讀能力和一定的編程經(jīng)驗(yàn)了,不展開(kāi)了),最后,我發(fā)現(xiàn)在header("location:{$gurl}?channelid= {$channelid}&cid={$cid}"); 這一行之前能輸出aa,這一行之后也能輸出aa,而我是很清楚,這一行本該跳轉(zhuǎn)到某個(gè)指定的頁(yè)面上的,后面不應(yīng)該輸出aa,同時(shí)我也知道造成這個(gè)問(wèn)題,通常是因?yàn)槌绦驁?zhí)行在之前就輸出過(guò)字符(如果你不清楚,就查google或手冊(cè))!

  接下來(lái)的工作,就是找哪個(gè)文件有這個(gè)輸出了,天啊,這太難找了!于是我換了另外一個(gè)做法“修改排查法”,我在本地把我那些修改的代碼,也換上去,發(fā)現(xiàn)沒(méi)有出現(xiàn)這樣的問(wèn)題,也就是說(shuō),我寫(xiě)的文件沒(méi)有問(wèn)題。然后我把客戶所有文件,都列出來(lái),按修改時(shí)間排序,并詢問(wèn)了客戶最后可以正常使用這個(gè)功能的時(shí)間,發(fā)現(xiàn)了一堆在此時(shí)間之后修改的php文件,除去我修改的那些文件,就剩下兩個(gè)文件了,其中一個(gè)是include/extend.func.php文件,我很清楚這個(gè)文件是一個(gè)dede提供給客戶做函數(shù)擴(kuò)展的文件,它被 common.func.php所引用,而common.func.php又是被全站所有文件所引用的文件! 于是我打開(kāi)這個(gè)文件,赫然在最后?>之后,有兩個(gè)空格一個(gè)空行!!!!!!

  把這些空格空行刪除,至此功能就全部正常了(包括我在模塊表里自定義了一個(gè)模塊鏈接,它在這個(gè)錯(cuò)誤的情況下,不能顯示在模塊列表里,現(xiàn)在也正常了)!

  以上文字,對(duì)于初級(jí)PHPer,可以學(xué)習(xí)領(lǐng)會(huì)一點(diǎn)點(diǎn)PHP調(diào)試技術(shù);對(duì)于PHP已經(jīng)比較熟的,而對(duì)DEDE還有有點(diǎn)陌生的,這里提供的一條經(jīng)驗(yàn)就是:修改DEDE的所有PHP文件,千萬(wàn)不要在頭尾兩行的 之外,寫(xiě)入任何字符,包括空格和空行!!

  以上就是關(guān)于織夢(mèng)DEDECMS二次開(kāi)發(fā)的一些個(gè)人經(jīng)驗(yàn)之談的全部?jī)?nèi)容,更多內(nèi)容請(qǐng)繼續(xù)關(guān)注西部數(shù)碼技術(shù)頻道網(wǎng)站!

標(biāo)簽: Google 代碼 網(wǎng)站 問(wèn)題 西部數(shù)碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:dedecms拓展函數(shù)

下一篇:在文章頁(yè)直接調(diào)用dede織夢(mèng)自定義字段圖片地址