Dreamweaver正則表達(dá)式徹底解決zencart中的Session Cookie報錯、XML解析錯誤以及空白
發(fā)布時間:2010-12-29 16:58:04 作者:佚名
我要評論
在使用zencart做外貿(mào)商城的時候,由于不同版本的bug,會遇到很多問題。一方面,zencart的升級和數(shù)據(jù)庫以及模板等可能不兼容;另外,zencart插件和zencart的版本也不夠兼容。
因此,目前我們商城還是采用原來的zencart1.38a的版本,而沒有升級到最新的zencart1.39h。
今天,我要講的是這個版本最容易出錯也最不好找出錯誤的錯誤,網(wǎng)上很多帖子都圍繞這個問題展開討論,但是,解決的不夠徹底,沒找到最好的通用的解決方法罷了。
zencart可能的錯誤如下:
1)Session\Cookie報錯,比如:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at E:\web\Apache\mydalle\index.php:1) in E:\web\Apache\mydalle\functions\sessions.php on line 108
原因:這個錯誤是zencart在處理函數(shù)session-start()、cookie()、header()之前已經(jīng)有輸出,由于index.php范圍太廣,很難確定是哪個文件報錯,尤其是設(shè)置一些SEO。
2)、XML解析錯誤
XML解析錯誤:xml處理指令不在實體的開始部分
位置:http://www.mydalle.com/index.php?main_page=rss_feed&feed=new_products
行:8,列:1:<?xml version="1.0" encoding="utf-8"?>
^
原因:這個錯誤是zencart裝了rss feed插件后調(diào)用rss時在輸出XML頭部定義時已經(jīng)有空行或者其他輸出了,也可能和1)是差不多為同一個錯誤,由于一些代碼不規(guī)范,禁止輸出header前面空行等也不是最好的解決方法。
網(wǎng)上有介紹刪除includes/languages/english.php最后的兩個空行和刪除includes/languages/english/meta_tags.php最后的空行,但是如果其他插件以及源代碼等產(chǎn)生了空行,問題依然沒有解決,這樣,就不是火狐的問題,IE也一樣的。
又有人說找到/includes/classes/rss_feed.php文件把<?xml version="1.0" encoding="utf-8"?>這一行$feedContent的變量值設(shè)置為空,其實,這是錯誤的解決辦法,前面的空行還是存在,錯誤還是存在,就算運氣好解決了,但解決的不徹底就像定時炸彈。
3)、空白頁
原因:一般產(chǎn)生于首頁或者購物車Add To Cart等頁面,這個錯誤也很可能是由于空行引起的錯誤。
從上面可以看出,這類錯誤最根本的原因就是:
函數(shù)session-start()、cookie()、header()之前已經(jīng)有輸出,引起嚴(yán)重的錯誤。但PHP的報錯卻找不到到底空行從哪里來。
我的辦法是用Dreamweaver正則表達(dá)式解決這一問題,而且目前得以徹底。
我用的是Dreamweaver,只要點編輯--查找和替換,然后選文件夾,只需要處理includes文件夾就能解決這一問題。然后選源代碼,而且選中使用正則表達(dá)式的復(fù)選框。最后選擇替換全部。
方法如下:
第一步,用正則表達(dá)式刪除所有空白行(其實這一步不一定要做,我只是為了規(guī)范和節(jié)省代碼)
要把
\n[\s| ]*\r
全部替換為
\n
第二步,用正則表達(dá)式刪除首尾空白行(這一步必須做,就是刪除產(chǎn)生錯誤的輸出。)
^[\s| ]*\n|\n[\s| ]*$
全部替換為
(替換為的填寫框什么都不要填就可以了)
注意,正則表達(dá)式不要多了空格等,可以先用一個文件進(jìn)行測試一下。最后替換之前備份一次。
以上兩步,做好后錯誤解決。我是把includes里的文件替換后就可以了,其他文件沒有處理,大家的情況可能不太一樣。
后來,經(jīng)過我排查,原來是templates這個文件夾的問題,templates是我們經(jīng)常改動的,在所難免。
大家有什么意見,也可以給我留言,謝謝!
今天,我要講的是這個版本最容易出錯也最不好找出錯誤的錯誤,網(wǎng)上很多帖子都圍繞這個問題展開討論,但是,解決的不夠徹底,沒找到最好的通用的解決方法罷了。
zencart可能的錯誤如下:
1)Session\Cookie報錯,比如:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at E:\web\Apache\mydalle\index.php:1) in E:\web\Apache\mydalle\functions\sessions.php on line 108
原因:這個錯誤是zencart在處理函數(shù)session-start()、cookie()、header()之前已經(jīng)有輸出,由于index.php范圍太廣,很難確定是哪個文件報錯,尤其是設(shè)置一些SEO。
2)、XML解析錯誤
XML解析錯誤:xml處理指令不在實體的開始部分
位置:http://www.mydalle.com/index.php?main_page=rss_feed&feed=new_products
行:8,列:1:<?xml version="1.0" encoding="utf-8"?>
^
原因:這個錯誤是zencart裝了rss feed插件后調(diào)用rss時在輸出XML頭部定義時已經(jīng)有空行或者其他輸出了,也可能和1)是差不多為同一個錯誤,由于一些代碼不規(guī)范,禁止輸出header前面空行等也不是最好的解決方法。
網(wǎng)上有介紹刪除includes/languages/english.php最后的兩個空行和刪除includes/languages/english/meta_tags.php最后的空行,但是如果其他插件以及源代碼等產(chǎn)生了空行,問題依然沒有解決,這樣,就不是火狐的問題,IE也一樣的。
又有人說找到/includes/classes/rss_feed.php文件把<?xml version="1.0" encoding="utf-8"?>這一行$feedContent的變量值設(shè)置為空,其實,這是錯誤的解決辦法,前面的空行還是存在,錯誤還是存在,就算運氣好解決了,但解決的不徹底就像定時炸彈。
3)、空白頁
原因:一般產(chǎn)生于首頁或者購物車Add To Cart等頁面,這個錯誤也很可能是由于空行引起的錯誤。
從上面可以看出,這類錯誤最根本的原因就是:
函數(shù)session-start()、cookie()、header()之前已經(jīng)有輸出,引起嚴(yán)重的錯誤。但PHP的報錯卻找不到到底空行從哪里來。
我的辦法是用Dreamweaver正則表達(dá)式解決這一問題,而且目前得以徹底。
我用的是Dreamweaver,只要點編輯--查找和替換,然后選文件夾,只需要處理includes文件夾就能解決這一問題。然后選源代碼,而且選中使用正則表達(dá)式的復(fù)選框。最后選擇替換全部。
方法如下:
第一步,用正則表達(dá)式刪除所有空白行(其實這一步不一定要做,我只是為了規(guī)范和節(jié)省代碼)
要把
\n[\s| ]*\r
全部替換為
\n
第二步,用正則表達(dá)式刪除首尾空白行(這一步必須做,就是刪除產(chǎn)生錯誤的輸出。)
^[\s| ]*\n|\n[\s| ]*$
全部替換為
(替換為的填寫框什么都不要填就可以了)
注意,正則表達(dá)式不要多了空格等,可以先用一個文件進(jìn)行測試一下。最后替換之前備份一次。
以上兩步,做好后錯誤解決。我是把includes里的文件替換后就可以了,其他文件沒有處理,大家的情況可能不太一樣。
后來,經(jīng)過我排查,原來是templates這個文件夾的問題,templates是我們經(jīng)常改動的,在所難免。
大家有什么意見,也可以給我留言,謝謝!
相關(guān)文章
Dreamweaver 正則表達(dá)式字符查找替換方法($1,$2使用說明)
用好了Dreamweaver的正則表達(dá)式查找替換功能,可以大大的加快我們的工作效率,最近有機會用到了正則要不太麻煩了,特分享下,方便以后學(xué)習(xí)查找資料2013-06-01Dreamweaver里使用正則表達(dá)式替換字符的一個例子
按住ctrl+F,勾上使用正則表達(dá)式。比如2010-06-11- 用Teleport pro對某站點整站下載之后,用Dreamweaver打開,發(fā)現(xiàn)代碼里有大量的冗余代碼2010-03-18
- 網(wǎng)站優(yōu)化過程中,經(jīng)常會遇到很多要批量修改的東西,一個個修改,明顯效率低下。本文是使用DW正則表達(dá)式批量替換的一個實例2013-06-08

