获取网络图片并保存到指定目录
一、使用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 }