网(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