单线程通过url实现图片下载

——————基础不好的先看下上一篇找找感觉————–

1、获取图片url

$file_contents = file_get_contents("http://www.cnblogs.com/yaradish/archive/2018/08/21.html");
preg_match_all('/\w+:\/\/[\w\.]+\/\w+\/\w+\/\w+\/[\w\.]+(.jpg|.png)/',$file_contents, $pics);
$pic = $pics[0];

  为了方便,抓取了某个页面的图片链接来进行测试,正则可能需要修改,如果正则看不懂,直接写url链接数组,如下:下面的图片链接都一样,自己去找一些图片链接

$pic = [                     
   https://images2018.cnblogs.com/blog/1436248/201808/1436248-20180819133735730-1667186904.png,
   https://images2018.cnblogs.com/blog/1436248/201808/1436248-20180819133735730-1667186904.png,
   https://images2018.cnblogs.com/blog/1436248/201808/1436248-20180819133735730-1667186904.png,
   https://images2018.cnblogs.com/blog/1436248/201808/1436248-20180819133735730-1667186904.png
];

2、设置开始时间(这一步可以不写,不过是打印并记录的开始的时间)

$beginTime = time();           
$lastTime = $beginTime;        
$count = 0;                 
echo 'begin download at ' . date('Y-m-d H:i:s', $beginTime) . '<br/>';    
set_time_limit(300);                         #页面超时处理
echo date('H:i:s',time())."<br/>";
$timeout = 5;                                # 单张图片时间限制

3、抓取图片数据信息

foreach ($pic as $value) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $value);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  
    $file_contents = curl_exec($ch);              #打这里位置和单张图片处理一模一样
    curl_close($ch);
    $picname = pathinfo($value,PATHINFO_BASENAME);         #获取图片名称
    $picdir = "./single";                                    
    if(!is_dir($picdir)){
        mkdir($picdir,0777);                       #建立文件夹存放图片
    }
    $savename = $picdir.$picname;
    $file = fopen("./single/".$savename,'w');              #建立图片存放图片信息 
    fwrite($file,$file_contents);
    fclose($file);
    $nowTime = time();                                     #后面的也可以不写都是时间显示及消耗时间                             
    $takeTime = $nowTime - $lastTime;                
    ++$count;                                           
    echo 'downloaded ' . $count . '---------------' . $takeTime . 's<br/>';           
    $lastTime = $nowTime;                          
    echo $picname."<br/>";
}  

4、总共消耗时间

$endTime = time();                       
$totalTime = $endTime - $beginTime;
echo 'end download at ' . date('Y-m-d H:i:s', $endTime) . '<br/>';
echo 'downloaded ' . $count . ' pictures take time ' . $totalTime . ' s<br/>';    

5、进入当前目录的single目录中查看下载的图片。over

猜你喜欢

转载自blog.csdn.net/yaradish/article/details/81950466