zoukankan      html  css  js  c++  java
  • 实现多线程下载图片到本地③

    --------------------------------------------基础不好先做上篇单线程,简单一点----------------------------------------------

    1、抓取图片链接

    $file_contents = file_get_contents("http://beta.microdemo.soarsvr.com/");
    preg_match_all('/w+://[w.]+/w+/w+/[w.]+(.jpg|.png)/',$file_contents, $pics);

      仍然可以自己写一个图片链接的数组进行测试

    2、设置抓取时间(可以略过,页面显示时查看方便)

    $pics = $pics[0];
    $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/><hr>";
    $timeout = 5;  

    3、抓取图片信息

    $mh = curl_multi_init();                                  #返回url批处理的句柄
    foreach ($pics as $k => $v) {
        $ch[$k] = curl_init();
        curl_setopt($ch[$k], CURLOPT_URL, $v);
        curl_setopt($ch[$k], CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch[$k], CURLOPT_HEADER, 0);
        curl_multi_add_handle($mh, $ch[$k]);            #向curl批处理会话中添加单独句柄
    }
    
    do {
        $status = curl_multi_exec($mh, $active);               #处理在栈中的每一个句柄             
        $result = curl_multi_info_read($mh);            #获取当前解析的cURL的相关传输信息
        if ($result !== false) {
            $content = curl_multi_getcontent($result['handle']);     #那么这个函数将会以字符串的形式返回那个cURL句柄获取的内容。      
            $picName = substr($pics[$count], strrpos($pics[$count], '/')+1);   
            $savePath = './multi/';                         
            if (!is_dir($savePath)) {                           
                @mkdir($savePath, 0777);
            }
            $saveName = $savePath . $picName;                     
            $fp = fopen($saveName, 'w');              
            fwrite($fp, $content);                              
            fclose($fp);                                       
            $nowTime = time();                                    
            $takeTime = $nowTime - $lastTime;                     
            ++$count;                                              
            echo 'downloaded ' . $count . 'th picture take time ' . $takeTime . 's<br/>';            
            $lastTime = $nowTime;                               
        }
    } while ($status == CURLM_CALL_MULTI_PERFORM || $active);
    curl_multi_close($mh);                                    

    4、设置结束时间

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

    5、进入目录中查看图片。

  • 相关阅读:
    板邓:解决Visual Studio 2017 安装程序清单签名验证失败
    板邓:PHP获取当前页面url地址、参数
    板邓:【WordPress文件解读】wp-config.php
    板邓:【WordPress文件解读】wp-load.php
    板邓:【WordPress文件解读】wp-blog-header.php
    读取符号库文件
    创建空间参考
    针对乱码中文进行编辑
    根据图层路径选择文件(存储)
    springboot实现数据库中数据导出Excel功能
  • 原文地址:https://www.cnblogs.com/yaradish/p/9524490.html
Copyright © 2011-2022 走看看