你在 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() 失败,就该转到策略处理程序,还按正常流程进行是没有意义的

解决方案 »

  1.   

    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
      

  2.   

    你没有判断那个 $this->conn 是否有效
      

  3.   


    稍加改进了一些,链接这些都没问题,现在的错误提示是:对链接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举例说明这个存在的问题,比如采集完第九个网页之后,采集第十页的时候出现匹配失败,而这个采集第十页的链接是第九页的网页信息提供的。  打开采集到的第九个文件,读取并匹配下一页的链接是没有问题的。出现这样的情况多次,每次我都尝试从文件读取并匹配下一页的链接都是没问题的。
      

  4.   


    这个问题通过检测到匹配失败时,从保存的上一页网页中,提取下一页链接,暂时解决了:对链接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(),又是这个老问题,应该可以通过重置连接解决