Home  >  Article  >  Backend Development  >  php CURL 采集有关问题-

php CURL 采集有关问题-

WBOY
WBOYOriginal
2016-06-13 13:24:29865browse

php CURL 采集问题---请指教
PHP代码
 

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
      <?php function Curl_http($array,$timeout){
    $res = array();
    $mh = curl_multi_init();//创建多个curl语柄
    $startime = getmicrotime();
    foreach($array as $k=>$url){
        $conn[$k]=curl_init($url);
        curl_setopt($conn[$k], CURLOPT_TIMEOUT, $timeout);//设置超时时间
        curl_setopt($conn[$k], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7);//HTTp定向级别
        curl_setopt($conn[$k], CURLOPT_HEADER, 0);//这里不要header,加块效率
        curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
        curl_setopt($conn[$k],CURLOPT_RETURNTRANSFER,1);
        curl_multi_add_handle ($mh,$conn[$k]);
    }
     //防止死循环耗死cpu 这段是根据网上的写法
        do {
            $mrc = curl_multi_exec($mh,$active);//当无数据,active=true
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);//当正在接受数据时
        while ($active and $mrc == CURLM_OK) {//当无数据时或请求暂停时,active=true
            if (curl_multi_select($mh) != -1) {
                do {
                    $mrc = curl_multi_exec($mh, $active);
                } while ($mrc == CURLM_CALL_MULTI_PERFORM);
            }
        }
    foreach ($array as $k => $url) {
          curl_error($conn[$k]);
          $res[$k]=curl_multi_getcontent($conn[$k]);//获得返回信息
          $header[$k]=curl_getinfo($conn[$k]);//返回头信息
          curl_close($conn[$k]);//关闭语柄
          curl_multi_remove_handle($mh  , $conn[$k]);   //释放资源 
        }

         
        curl_multi_close($mh);
        $endtime = getmicrotime();
        $diff_time = $endtime - $startime;

        return array('diff_time'=>$diff_time,
               'return'=>$res,
                'header'=>$header       
 );
}
 //计算当前时间
 function getmicrotime() {
list($usec, $sec) = explode(" ",microtime());
        return ((float)$usec + (float)$sec);
}

    //测试一下,curl 1个网址
$array = array(
"http://www.120ask.com/keshi.asp?c=69&a=&l=0&p=1",
);
 $data = Curl_http($array,'1');//调用
 var_dump($data);//输出

?>
  


libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll都拷贝到system32目录下,重启apache

PHP.ini 开启了 CURL

但是还是不行 错误提示我

Fatal error: Call to undefined function curl_multi_init() in D:\wamp\www\caiji\caiji.php on line 4

------解决方案--------------------
phpinfo();看看有没有curl,如果没有说明你根本没有开启成功(extension=php_curl.dll)
------解决方案--------------------
那你路劲没设置对,在试试~~
------解决方案--------------------
你看看你phpinfo()里面的php配置文件是你修改的那个吗?例如你把mysql模块关闭了在打开phpinfo()看看mysql模块是否开启,如果依然开启,那么说明你所用的php配置文件并不是你所修改的那个
------解决方案--------------------
标题党.
------解决方案--------------------
php CURL 采集问题---请指教
你应该问:
curl安装不成功---请指教



重启过apache吗,杀死过php-cgi吗。
------解决方案--------------------
这个可以用。
PHP code
array(3) { ["diff_time"]=> float(1.0497448444366) ["return"]=> array(1) { [0]=> NULL } ["header"]=> array(1) { [0]=> array(20) { ["url"]=> string(47) "http://www.120ask.com/keshi.asp?c=69&a=&l=0&p=1" ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(1) ["namelookup_time"]=> float(1) ["connect_time"]=> float(0) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(-1) ["starttransfer_time"]=> float(0) ["redirect_time"]=> float(0) } } }
 <div class="clear">
                 
              
              
        
            </div>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn