php curl pthreads 多线程抓取页面的循环执行不完

kuangkuang1 发布于 2015/10/20 17:20
阅读 840
收藏 0

想问下,php用pthreads多线程抓取页面信息老是出错的问题,           

 for ($i = $sn_count; $i < $arr_count ; $i++) {
                $sn = $csvfile[$i];
                if(!empty($sn)){
                    $a++;
                    $search_data = array(
                    '7.1.1' => $sn ,
                    '7.1.3' => 'search',
                    );
                    $sn_url = $test_url.'/'.$a.'.7.1';
                    $result = post_content($sn_url,$search_data,$cookie_file);
                    if (!empty($result)) {
                        echo $i.'<br />';
                        $sndata = instertdata($result,$txtfile,$i,$sn,$array1);
                        if (!empty($sndata)) {
                        }else{
                            $i--;
                            echo 'sndata no find';
                        }                      
                    }else{
                        echo 'result no find'.'<br />';
                        $i--;
                    }                  
                }
            }

多线程里面运行的有一个这样的for循环,post_content()是抓取页面信息,instertdata()是从页面中提取出需要的数据,再写入文件中,这样的代码,单线程的时候是ok的,不知道为嘛放在多线程里面就不行了,curl post    function post_content($url,$post,$cookie){
        $curl = curl_init(); 
        curl_setopt($curl, CURLOPT_URL, $url); 
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); 
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36');
        curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
        curl_setopt($curl, CURLOPT_POST, 1);  //post·½Ê½Ìá½»
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));  //ÒªÌá½»µÄÐÅÏ¢ 
        $content = curl_exec($curl);
        $curl_errno = curl_errno($curl);
        //var_dump($curl_error);
        $curl_error = curl_error($curl); 
        curl_close($curl);
        if($curl_errno>0){
            $content = 0;
        }
        if($curl_error>0){
            $content = 0;
        } 
        return $content;
    }

有没有大神能告诉一下到底是哪里出错了,急求啊~for循环没有由来的中断,根本找不到原因啊,呜呜,求解答

加载中
1
一位极其不愿意透漏姓名的马先生
一位极其不愿意透漏姓名的马先生
这个多线程扩展,本身就有坑,换golang吧
k
kuangkuang1
@采女孩的小蘑菇 12,谢谢,有时间学习下golang,另外问你下问题哈,你用过Highcharts吗?我现在在用这个画图,有些问题不太懂~
一位极其不愿意透漏姓名的马先生
一位极其不愿意透漏姓名的马先生
回复 @kuangkuang1 : 可以,只是多进程比较费资源,但是也有好处,不需要考虑同步,临界等等问题,如果是golang,就没事了,咱用小,又能解决这些问题
k
kuangkuang1
我现在用了一个比较笨的方法, while ($arr_count > $sn_count) { $result_data = model_thread_result_get($urls,$data_sn,$newsn); $sn_count = get_txtlines($newsn[0]); } 多线程加了个循环,没有读完就循环~
k
kuangkuang1
需要循环搜索的sn比较多,用多进程可以吗?golang对这个不太了解哇
返回顶部
顶部