網(wǎng)(LieHuo.Net)教程 使用dedecms建站一個月后(09.09月末左右),采集出了問題,不能再采集,馬上去官網(wǎng)搜索問題,發(fā)現(xiàn)有部分人跟我一樣出現(xiàn)了同樣的問題,奇怪的是連出問題的時間也差不多(我想這個問題值得深究,why?見以下分析),但是沒有官方人士作出任何有效回應(yīng),部分人士也開始對官方有了懷疑,以為是官方對程序有接口進(jìn)行著控制;更多的認(rèn)為是空間的問題,禁止了某些功能。我不知道別人的問題之因在哪里,經(jīng)過我長達(dá)5小時的反復(fù)調(diào)試程序,得出結(jié)果:這個問題與官方或者空間無關(guān),至少我的問題是這樣。
首先與空間無關(guān):我開始也是這樣懷疑,正好我的空間要到期了,就決定換個地方。直到昨天完成搬家,才發(fā)現(xiàn)我問題依然存在!fopen、fpus、fgets所有函數(shù)一切正常,難道真與官方有關(guān)?
決定調(diào)試程序。
但是你要直到我對php的一無所知,只能憑著對c++的了解和baidu的搜索,沒有編譯器、只有記事本,每次修改代碼只能通過打開遠(yuǎn)程網(wǎng)頁進(jìn)行測試,而且從沒有讀過dedecms的代碼,這是何其難!做過之后你就知道。(不知道是否有人能夠教我如何調(diào)試php程序?)
以下只給出調(diào)試過程中的關(guān)鍵點(diǎn):
1、dedehttpdown.class.php文件中的PrivateStartSession函數(shù)執(zhí)行到$httpstas = explode(” “,fgets($this->m_fp,256));這一行時,$this->m_fp異常出錯,出現(xiàn)feof($this->m_fp),斷開連接,讀取不到任何數(shù)據(jù)。(這是不能采集的原因,讀不到數(shù)據(jù))。
2、單獨(dú)新建一個頁面,fopen、fputs、fgets同一頁面,讀取頁面內(nèi)容正常。
3、比較單獨(dú)頁面代碼與PrivateStartSession函數(shù)代碼之間的區(qū)別,發(fā)現(xiàn)PrivateStartSession函數(shù)fputs是分多次發(fā)送的,而我的代碼是一次發(fā)現(xiàn)的,難道這就是問題的存在?
4、驗(yàn)證,將所有需要發(fā)送的信息組成一個字符串,一起發(fā)送。調(diào)試結(jié)果成功,問題就這樣解決了。
問題根本原因猜測:我的空間放在國外,訪問中國網(wǎng)站速度比較慢,多次fputs難道造成了多次請求,以至于最后的fgets得到的數(shù)據(jù)為空(如果成為多次請求的話,這樣的斷請求肯定是違規(guī)的,肯定沒有數(shù)據(jù))?我想這個也是最有可能的。(恕我對網(wǎng)絡(luò)的不了解,只是猜測)
如果這個假設(shè)成功的話,那么官網(wǎng)論壇中反應(yīng)的情況就有個合理的解釋了。官方論壇中只有部分人反應(yīng)這個問題,而且反應(yīng)在本地可以采集(本地的話與目標(biāo)網(wǎng)站可能連接比較接近),我猜測這些人的主機(jī)也不在國內(nèi)。但就是有一個問題還是無法解釋:就是為什么大家多是同一時間段左右出現(xiàn)問題呢?難道這段時間與海外的通信線路又出問題了?有待考證。
希望來這里的朋友能給我留個反饋(是否是國外主機(jī),有無幫你解決問題等),謝謝。
請將附件中的文件下載,并替換dedecms的include文件中的dedehttpdown.class.php(注意備份)
還有我的系統(tǒng)是utf-8 5.5的,不同版本的謹(jǐn)慎操作
替換文件:dedehttpdown.class.php