PHP使用流类Stream读cUrl下载内容实例

使用 stream 的好处就是不会因为数据大小而占用大量的内存,现在我们来分享代码实例。

代码1:将获得的代码直接写入某个文件

 代码如下

<?php
$urls =array( 
 'http://m.111cn.net/', 
 'http://www.111cn.net/', 
 'http://www.163.com/'
); 
  
$save_to='/test.txt';  // 把抓取的代码写入该文件 
$st =fopen($save_to,"a"); 
  
$mh = curl_multi_init(); 
foreach ($urls as $i =>$url) { 
  $conn[$i] = curl_init($url); 
  curl_setopt($conn[$i], CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
  curl_setopt($conn[$i], CURLOPT_HEADER ,0); 
  curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); 
  curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // 设置不将爬取代码写到浏览器,而是转化为字符串 
  curl_multi_add_handle ($mh,$conn[$i]); 

  
do { 
  curl_篮球世界杯在哪买球,multi_exec($mh,$active); 
}while ($active); 
    
foreach ($urls as $i =>$url) { 
  $data = curl_multi_getcontent($conn[$i]);// 获得爬取的代码字符串 
  fwrite($st,$data); // 将字符串写入文件。当然,也可以不写入文件,比如存入数据库 
}// 获得数据变量,并写入文件 
  
foreach ($urls as $i =>$url) { 
  curl_multi_remove_handle($mh,$conn[$i]); 
  curl_close($conn[$i]); 

  
curl_multi_close($mh); 
fclose($st);
?> 

$url = 'http://www.google.com.tw' ;   
   
/* 建立接收的Temp File Stream */   
$tmpfile = tmpfile ();   
   
   
$curl = curl_init ();   
   
/* 指定下载的的URL */   
curl_setopt ( $curl , CURLOPT_URL, $url );    
   
/* 指定存放的File Stream */   
curl_setopt ( $curl , CURLOPT_FILE, $tmpfile );   
   
/* 执行并取得状态*/   
$status = curl_exec ( $curl );   
curl_close ( $curl );   
   
if (! $status ){    
   fclose ( $tmpfile );    
   exit ( 'error' );    
}   
   
   
/* Temp File Stream 指标归零*/   
fseek ( $tmpfile , 0);   
   
/*一次读取一行*/   
while (( $line = fgets ( $tmpfile )) !== false ) {   
   var_dump ( $line );   
}   
   
/* 关闭Stream */   
fclose ( $tmpfile );

curl_setopt($curl, CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate'));
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');这个是解释gzip内容.................
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);
}
curl_close($curl); // 关键CURL会话
return $tmpInfo; // 返回数据
}

<?php
$urls =array( 
 'http://www.111cn.net/', 
 'http://www.baidu.com/', 
);// 设置要抓取的页面URL 
    
$save_to='test.txt';  // 把抓取的代码写入该文件  
  
$st =fopen($save_to,"a"); 
$mh = curl_multi_init();  
  
foreach ($urls as $i =>$url) { 
  $conn[$i] = curl_init($url); 
  curl_setopt($conn[$i], CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
  curl_setopt($conn[$i], CURLOPT_HEADER ,0); 
  curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); 
  curl_setopt($conn[$i], CURLOPT_FILE,$st);// 设置将爬取的代码写入文件 
  curl_multi_add_handle ($mh,$conn[$i]); 
}// 初始化 
    
do { 
  curl_multi_exec($mh,$active); 
}while ($active); // 执行 
    
foreach ($urls as $i =>$url) { 
  curl_multi_remove_handle($mh,$conn[$i]); 
  curl_close($conn[$i]); 
}// 结束清理 
    
curl_multi_close($mh); 
fclose($st);
?>
代码2:将获得的代码先放入变量,再写入某个文件

本文由美洲杯在哪买球发布于计算机教程,转载请注明出处:PHP使用流类Stream读cUrl下载内容实例

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。