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