完成了大约10分钟的采集后,出现fwrite(......)请求,出现警告,随后出现丢包,有些网页就出现抓取失败的问题。。
前面10分钟都没问题,10分钟之后,fwrite(....)发送请求出现警告的频率慢慢变大
难道是被服务器拒绝了请求?
错误提示信息:
Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 200
对链接http://www.mmkao.com/Beautyleg/201410/6565_6.html发起请求
即将采集下一组
对链接http://www.mmkao.com/Beautyleg/201410/6559.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_2.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_3.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_4.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_5.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_6.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_7.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_8.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_9.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6559_10.html发起请求
即将采集下一组
对链接http://www.mmkao.com/Beautyleg/201410/6549.html发起请求
对链接http://www.mmkao.com/Beautyleg/201410/6549_2.html发起请求
Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 200
对链接http://www.mmkao.com/Beautyleg/201410/6549_3.html发起请求
即将采集下一组
Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 200
对链接http://www.mmkao.com/Beautyleg/201410/6537.html发起请求
Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 200
有点疑惑,代码的实现原理还是很简单的,只是网络请求调试想对困难一些,有这方面经验的,可以分享一下
代码有点多?居然提示不能超过10000个字符。
代码链接在这里: http://blog.csdn.net/free_program_1314/article/details/41798199
你在 100 行处 $this->conn = fsockopen($this->ip,$this->port,$errno,$errstr,$this->timeout);
后只在 101 行判断了是否连接成功,虽然不成功时会返回 false
但在 62 行调用时 $this->connect(); 并没有检查是否返回了 false
即无论连接是否成功,程序都会继续执行。于是很自然的把隐患扩散了出去
你至少得在 200 行的 fwrite($this->conn,.... 前,判断一下 $this->conn 是否是资源
而若 $this->connect() 失败,就该转到策略处理程序,还按正常流程进行是没有意义的
你在 100 行处 $this->conn = fsockopen($this->ip,$this->port,$errno,$errstr,$this->timeout);
后只在 101 行判断了是否连接成功,虽然不成功时会返回 false
但在 62 行调用时 $this->connect(); 并没有检查是否返回了 false
即无论连接是否成功,程序都会继续执行。于是很自然的把隐患扩散了出去
你至少得在 200 行的 fwrite($this->conn,.... 前,判断一下 $this->conn 是否是资源
而若 $this->connect() 失败,就该转到策略处理程序,还按正常流程进行是没有意义的
if($this->conn) { if($len != fwrite($this->conn, $this->cmd_line.$this->header.$this->post_content,$len)) { $this->status = "发送请求failed"; die($this->status); } } else { die($this->status); }
你没有判断那个 $this->conn 是否有效
你没有判断那个 $this->conn 是否有效
也就是说匹配下一页的链接,如果有问题,刚开始采集就应该出现这个提示。。。现在的问题是,这个问题不定期出现
不定期出现是正常的,就算是用浏览器访问,偶尔出现页面打不开(刷新一下就好了)不也是正常的吗?
你只要随时检查连接的有效性,并在失效时做出处理就可以了。比如等几秒再次连接
不定期出现是正常的,就算是用浏览器访问,偶尔出现页面打不开(刷新一下就好了)不也是正常的吗?
你只要随时检查连接的有效性,并在失效时做出处理就可以了。比如等几秒再次连接
不定期出现是正常的,就算是用浏览器访问,偶尔出现页面打不开(刷新一下就好了)不也是正常的吗?
你只要随时检查连接的有效性,并在失效时做出处理就可以了。比如等几秒再次连接
看起来很NB的样子