>  기사  >  백엔드 개발  >  원격 이미지를 획득하고 로컬로 다운로드 및 저장하는 PHP 방법 분석

원격 이미지를 획득하고 로컬로 다운로드 및 저장하는 PHP 방법 분석

高洛峰
高洛峰원래의
2016-12-20 16:37:271475검색

이 기사의 예에서는 PHP로 원격 이미지를 가져와 로컬에 다운로드하고 저장하는 방법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

원격 사진은 원격 서버의 데이터를 참조하며, PHP의 다양한 기능을 통해 해당 데이터를 읽고 다운로드할 수 있습니다. 자동으로 다운로드되고 예제를 로컬로 다운로드하여 저장합니다.

예시 1, 사진 종류를 자동으로 식별하여 그에 맞게 저장할 수 있습니다

/*
*功能:php完美实现下载远程图片保存到本地
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式
*当保存文件名称为空时则使用远程文件原来的名称
*/
function getImage($url,$save_dir='',$filename='',$type=0){
  if(trim($url)==''){
 return array('file_name'=>'','save_path'=>'','error'=>1);
 }
 if(trim($save_dir)==''){
 $save_dir='./';
 }
  if(trim($filename)==''){//保存文件名
    $ext=strrchr($url,'.');
    if($ext!='.gif'&&$ext!='.jpg'){
  return array('file_name'=>'','save_path'=>'','error'=>3);
 }
    $filename=time().$ext;
  }
 if(0!==strrpos($save_dir,'/')){
 $save_dir.='/';
 }
 //创建保存目录
 if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
 return array('file_name'=>'','save_path'=>'','error'=>5);
 }
  //获取远程文件所采用的方法
  if($type){
 $ch=curl_init();
 $timeout=5;
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
 $img=curl_exec($ch);
 curl_close($ch);
  }else{
   ob_start();
   readfile($url);
   $img=ob_get_contents();
   ob_end_clean();
  }
  //$size=strlen($img);
  //文件大小
  $fp2=@fopen($save_dir.$filename,'a');
  fwrite($fp2,$img);
  fclose($fp2);
 unset($img,$url);
  return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
}

예시 2, 사진이 아니면 자동으로 건너뛰기

<?php
function GrabImage($url, $filename = "") {
 if ($url == ""):return false;
 endif;
 //如果$url地址为空,直接退出
 if ($filename == "") {
 //如果没有指定新的文件名
 $ext = strrchr($url, ".");
 //得到$url的图片格式
 if ($ext != ".gif" && $ext != ".jpg"):return false;
 endif;
 //如果图片格式不为.gif或者.jpg,直接退出
 $filename = date("dMYHis") . $ext;
 //用天月面时分秒来命名新的文件名
 }
 ob_start();//打开输出
 readfile($url);//输出图片文件
 $img = ob_get_contents();//得到浏览器输出
 ob_end_clean();//清除输出并关闭
 $size = strlen($img);//得到图片大小
 $fp2 = @fopen($filename, "a");
 fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
 fclose($fp2);
 return $filename;//返回新的文件名
}
$img = GrabImage("http://www.jb51.net /6648d73db0edd1e89f3d62f7.jpg", "");
if ($img):echo &#39;<pre class="brush:php;toolbar:false"><img src="&#39; . $img . &#39;">
'; //如果返回值为真,这显示已经采集到服务器上的图片 else:echo "false"; endif; //否则,输出采集失败 ?>

사실 위의 편집자가 가장 좋아하는 다운로드 방법은 이 둘은 아니지만 사진을 비동기적으로 저장하고 다운로드하는 데는 컬이 더 좋습니다.

이 글이 PHP 프로그래밍에 종사하는 모든 분들께 도움이 되기를 바랍니다.

원격 이미지를 획득하고 로컬로 다운로드 및 저장하는 더 많은 PHP 방법을 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.