您好,欢迎访问一九零五行业门户网

PHP下载远程图片并保存到本地方法总结,_PHP教程

php下载远程图片并保存到本地方法总结,1.获取远程文件大小及信息的函数
function getfilesize($url){ $url = parse_url($url); if($fp = @fsockopen($url['host'],empty($url['port'])?80:$url['port'],$error)){ fputs($fp,get .(empty($url['path'])?'/':$url['path']). http/1.1\r\n); fputs($fp,host:$url[host]\r\n\r\n); while(!feof($fp)){ $tmp = fgets($fp); if(trim($tmp) == ''){ break; }else if(preg_match('/content-length:(.*)/si',$tmp,$arr)){ return trim($arr[1]); } } return null; }else{ return null; } } echo getfilesize(http://www.dianpub.com/download/xml.rar)
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; } 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.dianpub.com/images/_1978837_detector_ap100.jpg,); if($img):echo '
';else:echo false;endif;//记录程序运行结束的时间$endtime=getmicrotime();//返回运行时间exit($endtime-$begintime);3.全文下载图片
if(!empty($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) { $value = trim($value); $get_file = @file_get_contents($value); $rndfilename = $imgpath./.$millisecond.$key...substr($value,-3,3); $fileurl = $imgurl./.$millisecond.$key...substr($value,-3,3); if($get_file) { $fp = @fopen($rndfilename,w); @fwrite($fp,$get_file); @fclose($fp); } $body = ereg_replace($value,$fileurl,$body); } $body = addslashes($body); }
4.php远程文件下载类(支持断点续传)
1).功能:支持断点续传的下载,能计算传输率,能控制传输率
简易使用方法:
$object = new httpdownload();$object->set_byfile($file);//服务器文件名,包括路径$object->filename = $filename;//下载另存为的文件名$object->download();
类文件:
null); var $use_resume = true; var $use_autoexit = false; var $use_auth = false; var $filename = null; var $mime = null; var $bufsize = 2048; var $seek_start = 0; var $seek_end = -1; var $totalsizeref = 0; var $bandwidth = 0; var $speed = 0; 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 \g\m\t' , $this->data_mod)); if ($this->data_section && $this->use_resume) { header(http/1.0 206 partial content); header(status: 206 partial content); header('accept-ranges: bytes'); header(content-range: bytes $seek_start-$seek_end/$size); header(content-length: . ($seek_end - $seek_start + 1)); } 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 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 download\n, 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); $this->bandwidth = 0; $size = $this->data_len; if ($this->data_type == 0) //download from a file { $size = filesize($this->data); if ($seek > ($size - 1)) $seek = 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_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 bandwidth += $size; $this->sentsize+=$size; } else { echo fread($res , $bufsize); $this->bandwidth += $bufsize; $this->sentsize+=$bufsize; } $size -= $bufsize; flush(); if ($speed > 0 && ($this->bandwidth > $speed*$packet*1024)) { sleep(1); $packet++; } } fclose($res); } elseif ($this->data_type == 1) //download from a string { if ($seek > ($size - 1)) $seek = 0; if ($this->seek_end seek_end = $this->data_len - 1; $this->data = substr($this->data , $seek , $this->seek_end - $seek + 1); if ($this->filename == null) $this->filename = time(); $size = strlen($this->data); $this->header($this->data_len,$seek,$this->seek_end); while (!connection_aborted() && $size > 0) { if ($size bandwidth += $size; $this->sentsize+=$size; } else { $this->bandwidth += $bufsize; $this->sentsize+=$bufsize; } echo substr($this->data , 0 , $bufsize); $this->data = substr($this->data , $bufsize); $size -= $bufsize; flush(); if ($speed > 0 && ($this->bandwidth > $speed*$packet*1024)) { sleep(1); $packet++; } } } else if ($this->data_type == 2) { //just send a redirect header header('location: ' . $this->data); } if($this->totalsizeref==$this->sentsize )error_log(end download\n, 3,/usr/local/www/apache22/logs/apache22_php.err); else error_log(download is canceled\n, 3,/usr/local/www/apache22/logs/apache22_php.err); if ($this->use_autoexit) exit(); //restore old status ignore_user_abort($old_status); set_time_limit(ini_get(max_execution_time)); }catch(exception $e) { error_log(cancel download\n.$e, 3,/usr/local/www/apache22/logs/apache22_php.err);} return true;}function set_byfile($dir) { if (is_readable($dir) && is_file($dir)) { $this->data_len = 0; $this->data = $dir; $this->data_type = 0; $this->data_mod = filemtime($dir); $this->totalsizeref = filesize($dir); return true; } else return false;}function set_bydata($data) { if ($data == '') return false; $this->data = $data; $this->data_len = strlen($data); $this->data_type = 1; $this->data_mod = time(); return true;}function set_byurl($data) { $this->data = $data; $this->data_len = 0; $this->data_type = 2; return true;}function set_lastmodtime($time) { $time = intval($time); if ($time data_mod = $time;}function _auth() { if (!isset($_server['php_auth_user'])) return false; if (isset($this->handler['auth']) && function_exists($this->handler['auth'])) { return $this->handler['auth']('auth' , $_server['php_auth_user'],$_server['php_auth_pw']); } else return true; //you must use a handler }}?>
5. php 使用gd库下载远程图片

注意这个要把php分配内存调大,应用时用大内存服务器
您可能感兴趣的文章:php带密码功能并下载远程文件保存本地指定目录 修改加强版使用thinkphp自带的http类下载远程图片到本地的实现代码php中通过正则表达式下载内容中的远程图片的函数代码解析php下载远程图片函数 可伪造来路php实现的下载远程图片自定义函数分享php中使用gd库实现远程图片下载实例php正则匹配文章中的远程图片地址并下载图片至本地
http://www.bkjia.com/phpjc/1094756.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1094756.htmltecharticlephp下载远程图片并保存到本地方法总结, 1. 获取远程文件大小及信息的函数 function getfilesize($url){ $url = parse_url($url); if($fp = @fsockopen($url['h...
其它类似信息

推荐信息