加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP下载远程图片并保存到本地方法概括

发布时间:2022-07-18 14:54:18 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP下载远程图片并保存到本地方法总结的相关资料,需要的朋友可以参考下。 1.获取远程文件大小及信息的函数 function getFileSize($url){ $url = parse_url($url); if($fp = @fsockopen($url[host],emptyempty($url[port])?80:$url[port],$
  这篇文章主要介绍了PHP下载远程图片并保存到本地方法总结的相关资料,需要的朋友可以参考下。
 
  1.获取远程文件大小及信息的函数
 
  function getFileSize($url){  
  $url = parse_url($url);  
  if($fp = @fsockopen($url['host'],emptyempty($url['port'])?80:$url['port'],$error)){  
  fputs($fp,"GET ".(emptyempty($url['path'])?'/':$url['path'])." HTTP/1.1rn");  
  fputs($fp,"Host:$url[host]rnrn");  
   }else if(preg_match('/Content-Length:(.*)/si',$tmp,$arr)){  
  return trim($arr[1]);  
  }  
  }  
  return null;  
  }else{  
  return null;  
  }  
  }  
  echo getFileSize(<a href="http://www.phpfensi.com/download/xml.rar">http://www.phpfensi.com/download/xml.rar</a>)
  2.图片
 
  //记录程序开始的时间
  $BeginTime=getmicrotime();
  function GrabImage($url,$filename="") {  
  if($url==""):return false;endif;  
  if($filename=="") {  
  $ext=strrchr($url,".");  
  if($ext!=".gif" && $ext!=".jpg"):return false;endif;  
  $filename=date("dMYHis").$ext;  
  }  
   fclose($fp2);  
  return $filename;  
  }  
  $img=GrabImage("http://www.phpfensi.com/images/_1978837_detector_ap100.jpg","");  
  if($img):echo '<pre><img src="'.$img.'"></pre>';else:echo "false";endif;
  //记录程序运行结束的时间
  $EndTime=getmicrotime();
  //返回运行时间
  exit($EndTime-$BeginTime);
  3.全文下载图片
 
  if(!emptyempty($saveremoteimg))  
  {  
  $body = stripslashes($body);  
  $img_array = array();  
  preg_match_all("/(src|SRC)=["|'| ]{0,}(http://(.*).(gif|jpg|jpeg|bmp|png))/isU",$body,$img_array);  
  $img_array = array_unique($img_array[2]);  
  set_time_limit(0);  
  $imgUrl = $img_dir."/".strftime("%Y%m%d",time());  
  $imgPath = $base_dir.$imgUrl;  
  $milliSecond = strftime("%H%M%S",time());  
  if(!is_dir($imgPath)) @mkdir($imgPath,0777);  
  foreach($img_array as $key =>$value)  
  {  
   }  
  $body = addslashes($body);  
  }
  4.PHP远程文件下载类(支持断点续传)
 
  1).功能:支持断点续传的下载,能计算传输率,能控制传输率
 
  简易使用方法:
 
  $object = new httpdownload();
 
  $object->set_byfile($file);//服务器文件名,包括路径
 
  $object->filename = $filename;//下载另存为的文件名
 
  $object->download();
 
  类文件:
 
  <?
  class httpdownload {  
  var $data = null;  
  var $data_len = 0;  
  var $data_mod = 0;  
  var $data_type = 0;  
  var $data_section = 0; //section download  
  var $sentSize=0;  
  var $handler = array('auth' => null);  
   function initialize() {  
  global $HTTP_SERVER_VARS;  
  if ($this->use_auth) //use authentication {  
  if (!$this->_auth()) //no authentication {  
  header('WWW-Authenticate: Basic realm="Please enter your username and password"');  
  header('HTTP/1.0 401 Unauthorized');  
  header('status: 401 Unauthorized');  
  if ($this->use_autoexit) exit();  
  return false;  
  }  
  }  
  if ($this->mime == null) $this->mime = "application/octet-stream"; //default mime  
  if (isset($_SERVER['HTTP_RANGE']) || isset($HTTP_SERVER_VARS['HTTP_RANGE'])) {  
  if (isset($HTTP_SERVER_VARS['HTTP_RANGE'])) $seek_range = substr($HTTP_SERVER_VARS['HTTP_RANGE'] , strlen('bytes='));  
  else $seek_range = substr($_SERVER['HTTP_RANGE'] , strlen('bytes='));  
  $range = explode('-',$seek_range);  
  if ($range[0] > 0) {  
  $this->seek_start = intval($range[0]);  
  }  
  if ($range[1] > 0) $this->seek_end = intval($range[1]);  
  else $this->seek_end = -1;  
  if (!$this->use_resume) {  
  $this->seek_start = 0;  
  //header("HTTP/1.0 404 Bad Request");  
  //header("Status: 400 Bad Request");  
  //exit;  
  //return false;  
  } else {  
  $this->data_section = 1;  
  }  
  } else {  
  $this->seek_start = 0;  
  $this->seek_end = -1;  
  }  
  $this->sentSize=0;  
  return true;
  }
  function header($size,$seek_start=null,$seek_end=null) {  
  header('Content-type: ' . $this->mime);  
  header('Content-Disposition: attachment; filename="' . $this->filename . '"');  
  header('Last-Modified: ' . date('D, d M Y H:i:s GMT' , $this->data_mod));  
   } else {  
  header("Content-Length: $size");  
  }
  }
  function download_ex($size) {  
  if (!$this->initialize()) return false;  
  ignore_user_abort(true);  
  //Use seek end here  
  if ($this->seek_start > ($size - 1)) $this->seek_start = 0;  
  if ($this->seek_end <= 0) $this->seek_end = $size - 1;  
  $this->header($size,$seek,$this->seek_end);  
  $this->data_mod = time();  
  return true;
  }
  function download() {  
  if (!$this->initialize()) return false;  
  try {  
  error_log("begin downloadn", 3,"/usr/local/www/apache22/LOGS/apache22_php.err");  
  $seek = $this->seek_start;  
  $speed = $this->speed;  
  $bufsize = $this->bufsize;  
  $packet = 1;  
  //do some clean up  
  @ob_end_clean();  
  $old_status = ignore_user_abort(true);  
  @set_time_limit(0);  
   if ($this->filename == null) $this->filename = basename($this->data);  
  $res = fopen($this->data,'rb');  
  if ($seek) fseek($res , $seek);  
  if ($this->seek_end < $seek) $this->seek_end = $size - 1;  
  $this->header($size,$seek,$this->seek_end); //always use the last seek  
  $size = $this->seek_end - $seek + 1;  
  while (!(connection_aborted() || connection_status() == 1) && $size > 0) {  
  if ($size < $bufsize) {  
  echo fread($res , $size);  
  $this->bandwidth += $size;  
  $this->sentSize+=$size;  
  } else {  
  echo fread($res , $bufsize);  
  $this->bandwidth += $bufsize;  
  $this->sentSize+=$bufsize;  
  }  
  $size -= $bufsize;  

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读