zoukankan      html  css  js  c++  java
  • 获取网络图片并保存到指定目录

    一、使用file_get_contents()函数
     1 /**
     2  * @return int
     3  * 测试获取网络图片并保存到本地目录,保留原来文件名
     4  */
     5 public function down_img()
     6 {
     7     $url = 'http://test2.bkjhskjdfs.cn/Uploads/file/20180207/1517997669982517.png';
     8     $file_arr = explode('/', $url);
     9     $filename =  $file_arr[(count($file_arr) - 1)];//文件名称生成
    10     $filepath = $_SERVER['DOCUMENT_ROOT'].'/Uploads/downImg';
    11     //创建目录
    12     $dir = iconv("UTF-8", "GBK", $filepath);
    13     if (!file_exists($dir)){
    14         mkdir ($dir,0777,true);
    15     } else {
    16         //文件已存在,修改权限
    17         chmod($dir, 0777);
    18     }
    19     $state = @file_get_contents($url,0,null,0);//获取网络资源的字符内容
    20     if($state){
    21         ob_start();//打开输出
    22         readfile($url);//输出图片文件
    23         $img = ob_get_contents();//得到浏览器输出
    24         ob_end_clean();//清除输出并关闭
    25         $size = strlen($img);//得到图片大小
    26         $fp2 = @fopen($filepath.'/'.$filename, "a");
    27         fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
    28         fclose($fp2);
    29         return 1;
    30     }
    31     else{
    32         return 0;
    33     }
    34 
    35 }
    
    

    二、使用curl函数,解决防盗链问题

     1 /**
     2  * @return int
     3  * 测试获取网络图片并保存到本地目录
     4  * 可以解决防盗链的问题
     5  */
     6 public function down_img()
     7 {
     8     $url = 'http://video.hujfadsf.cn/8fc287a1c2a045048f09688a293dcc7b/covers/fhuayfadnf-00004.jpg';
     9     //获取原图片名称
    10     $file_arr = explode('/', $url);
    11     $filename =  $file_arr[(count($file_arr) - 1)];//文件名称生成
    12     $filepath = $_SERVER['DOCUMENT_ROOT'].'/Uploads/downImg';
    13     //创建目录
    14     $dir = iconv("UTF-8", "GBK", $filepath);
    15     if (!file_exists($dir)){
    16         mkdir ($dir,0777,true);
    17     } else {
    18         //文件已存在,修改权限
    19         chmod($dir, 0777);
    20     }
    21     //抓取远程图片,可以解决防盗链问题
    22     $dir = pathinfo($url);
    23     $host = $dir['dirname'];
    24     $refer = $host . '/';
    25     $ch = curl_init($url);
    26     curl_setopt($ch, CURLOPT_REFERER, $refer);
    27     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    28     curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    29     $data = curl_exec($ch);
    30     curl_close($ch);
    31     //写入获得的数据
    32     $write = @fopen($filepath.'/'.$filename, "wa");
    33     fwrite($write,$data);
    34     fclose($write);
    35     echo 'success';exit;
    36 
    37 }


  • 相关阅读:
    解决使用gomod后goland导包报红问题
    Golang写文件的坑
    Golang去除字符串前后空格
    Golang通过结构体解析和封装XML
    Golang获取CPU、内存、硬盘使用率
    Golang数组和切片的区别
    Golang修改操作系统时间
    Golang中GBK和UTF8编码格式互转
    Golang中的各种时间操作
    Golang十六进制字符串和byte数组互转
  • 原文地址:https://www.cnblogs.com/lfjblog/p/10614023.html
Copyright © 2011-2022 走看看