php采集程序
前面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); }
//问题出在fwrite(....)发送请求失败这里。。。
Notice: fwrite(): in E:\CodeEdit\php\http\001.php on line 213
发送请求failed
你没有判断那个 $this->conn 是否有效
你没有判断那个 $this->conn 是否有效
稍加改进了一些,链接这些都没问题,现在的错误提示是:
对链接http://www.mmkao.com/Beautyleg/201412/7066_9.html发起请求
没有下一页,原因是:匹配image分页组失败
但是getRollLink这个匹配下一页的函数并没有什么问题,我反复测试过,即便从本地保存的网页里读取也没问题,而且在出现这个问题之前,也采集了很多网页,也没出现问题。
对链接http://www.mmkao.com/Beautyleg/201412/7066_5.html发起请求
对链接http://www.mmkao.com/Beautyleg/201412/7066_6.html发起请求
对链接http://www.mmkao.com/Beautyleg/201412/7066_7.html发起请求
对链接http://www.mmkao.com/Beautyleg/201412/7066_8.html发起请求
对链接http://www.mmkao.com/Beautyleg/201412/7066_9.html发起请求
没有下一页,原因是:匹配image分页组失败
改进后的发在这里了: http://blog.csdn.net/free_program_1314/article/details/41805697
举例说明这个存在的问题,比如采集完第九个网页之后,采集第十页的时候出现匹配失败,而这个采集第十页的链接是第九页的网页信息提供的。 打开采集到的第九个文件,读取并匹配下一页的链接是没有问题的。出现这样的情况多次,每次我都尝试从文件读取并匹配下一页的链接都是没问题的。
也就是说匹配下一页的链接,如果有问题,刚开始采集就应该出现这个提示。。。现在的问题是,这个问题不定期出现
不定期出现是正常的,就算是用浏览器访问,偶尔出现页面打不开(刷新一下就好了)不也是正常的吗?
你只要随时检查连接的有效性,并在失效时做出处理就可以了。比如等几秒再次连接
不定期出现是正常的,就算是用浏览器访问,偶尔出现页面打不开(刷新一下就好了)不也是正常的吗?
你只要随时检查连接的有效性,并在失效时做出处理就可以了。比如等几秒再次连接
偶明白了
不定期出现是正常的,就算是用浏览器访问,偶尔出现页面打不开(刷新一下就好了)不也是正常的吗?
你只要随时检查连接的有效性,并在失效时做出处理就可以了。比如等几秒再次连接
这个问题通过检测到匹配失败时,从保存的上一页网页中,提取下一页链接,暂时解决了:
对链接http://www.mmkao.com/Beautyleg/201411/6906_13.html发起请求
没有下一页,原因是:匹配image分页组失败,尝试从文件中读取匹配模式
对链接http://www.mmkao.com/Beautyleg/201411/6906_14.html发起请求
即将采集下一组
对链接http://www.mmkao.com/Beautyleg/201411/6892.html发起请求
对链接http://www.mmkao.com/Beautyleg/201411/6892_2.html发起请求
对链接http://www.mmkao.com/Beautyleg/201411/6892_3.html发起请求
采集了10分钟之后,还是出现请求失败的问题,,,fwrite(),又是这个老问题,应该可以通过重置连接解决
看起来很NB的样子