获取网络图片并保存到指定目录

一、使用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 }


原文地址:https://www.cnblogs.com/lfjblog/p/10614023.html