本篇文章给大家谈谈PHP下载远程图片并保存到本地方法总结,以及php下载远程文件的知识点,同时本文还将给你拓展php完美实现下载远程图片保存到本地(保存微信头像)、php采集远程网页图片并保存到本地、
本篇文章给大家谈谈PHP下载远程图片并保存到本地方法总结,以及php 下载 远程文件的知识点,同时本文还将给你拓展php 完美实现下载远程图片保存到本地(保存微信头像)、php 采集远程网页图片并保存到本地、PHP下载远程图片保存到本地、PHP下载远程图片保存到本地的方法详解等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- PHP下载远程图片并保存到本地方法总结(php 下载 远程文件)
- php 完美实现下载远程图片保存到本地(保存微信头像)
- php 采集远程网页图片并保存到本地
- PHP下载远程图片保存到本地
- 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 ''<pre><img src="''.$img.''"></pre>'';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();
类文件:
<? 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); 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 <= 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 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) $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; 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) $this->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 < $bufsize) { $this->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 <= 0) $time = time(); $this->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 $imgname = "http://imgdujia.kuxun.cn/newpic/929/812929/4.jpg"; $src_im = imagecreatefromjpeg($imgname); $srcW = ImageSX($src_im); //获得图像的宽 $srcH = ImageSY($src_im); //获得图像的高 $dst_im = ImageCreateTrueColor($srcW,$srcH); //创建新的图像对象 imagecopy($dst_im, $src_im, 0, 0, 0, 0, $srcW, $srcH); imagejpeg($dst_im, "newpic.jpg"); //创建缩略图文件 echo "<img src="newpic.jpg" mce_src="newpic.jpg"></img>"; ?> <?php header("Content-type: image/png"); $im = imagecreatefromjpeg("http://postimg.mop.com/200602/02/74/122374/200602022335325121.JPG"); $white = imagecolorallocate($im, 0xF9, 0xD7, 0xCD); imagefill($im, 0, 0,$white); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, "A Simple Text String", $text_color); imagepng($im); imagedestroy($im); ?>
注意这个要把PHP分配内存调大,应用时用大内存服务器
- PHP下载远程图片的几种方法总结
- PHP实现的下载远程图片自定义函数分享
- 解析php下载远程图片函数 可伪造来路
- 使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
- PHP实现下载远程图片保存到本地的方法
php 完美实现下载远程图片保存到本地(保存微信头像)

/**
* php完美实现下载远程图片保存到本地
* @param: 文件url,保存文件目录,保存文件名称,使用的下载方式 当保存文件名称为空时则使用远程文件原来的名称
* @date: 2017-05-13
*/
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);
}
在调用上面方法时:(其中 getimage 方法已被存放在公共函数中,可直接调用。$headimgurl 为微信头像地址)
$headimg = ''./Uploads/Picture/uid2/headimg/''.$openid.''.jpg'';
$content = getimage($headimgurl,''./Uploads/Picture/uid2/headimg/'',$openid.''.jpg'',1);
php 采集远程网页图片并保存到本地
ob_start : 打开输出缓冲
readfile : 读入一个文件并写入到输出缓冲
返回从文件中读入的字节数。如果出错返回 FALSE 并且除非是以 @readfile() 形式调用,否则会显示错误信息。
ob_end_clean() : Clean (erase) the output buffer and turn off output buffering(清除输出缓冲)
//URL是远程的完整图片地址,不能为空, $filename 是另存为的图片名字
//默认把图片放在以此脚本相同的目录里
function GrabImage($url, $filename=""){
//$url 为空则返回 false;
if($url == ""){return false;}
$ext = strrchr($url, ".");//得到图片的扩展名
if($ext != ".gif" && $ext != ".jpg" && $ext != ".bmp"){echo "格式不支持!";return false;}
if($filename == ""){$filename = time()."$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;
}
//测试
GrabImage("http://www.111cn.net教程/banner/banner.gif", "as.gif");
?>
PHP下载远程图片保存到本地
下面是小编 jb51.cc 通过网络收集整理的代码片段。
小编小编现在分享给大家,也给大家做个参考。
<?PHP function get_file($url,$folder,$pic_name){ set_time_limit(24*60*60); //限制最大的执行时间 $destination_folder=$folder?$folder.'/':''; //文件下载保存目录 $newfname=$destination_folder.$pic_name;//文件PATH $file=fopen($url,'rb'); if($file){ $newf=fopen($newfname,'wb'); if($newf){ while(!feof($file)){ fwrite($newf,fread($file,1024*8),1024*8); } } if($file){ fclose($file); } if($newf){ fclose($newf); } } } get_file("http://www.baidu.com/img/baidu_logo.gif","file","baidu.jpg"); ?>
以上是小编(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给程序员好友。
PHP下载远程图片保存到本地的方法详解
本篇文章主要介绍了php实现下载远程图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在使用 PHP 做简单的爬虫的时候,我们经常会遇到需要下载远程图片的需求,所以下面来简单实现这个需求。
1.使用 curl
比如我们有下面这两张图片:
$images = [ 'https://dn-laravist.qbox.me/2015-09-22_00-17-06j.png', 'https://dn-laravist.qbox.me/2015-09-23_00-58-03j.png' ];
立即学习“PHP免费学习笔记(深入)”;
第一步,我们可以直接来使用最简单的代码实现:
function download($url, $path = 'images/') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); $file = curl_exec($ch); curl_close($ch); $filename = pathinfo($url, PATHINFO_BASENAME); $resource = fopen($path . $filename, 'a'); fwrite($resource, $file); fclose($resource); }
立即学习“PHP免费学习笔记(深入)”;
那在下载远程图片的时候就可以这样:
foreach ( $images as $url ) { download($url); }
立即学习“PHP免费学习笔记(深入)”;
2.封装一个类
缕清思路之后,我们可以将这个基本的功能封装到一个类中:
class Spider { public function downloadImage($url, $path = 'images/') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); $file = curl_exec($ch); curl_close($ch); $filename = pathinfo($url, PATHINFO_BASENAME); $resource = fopen($path . $filename, 'a'); fwrite($resource, $file); fclose($resource); } }
立即学习“PHP免费学习笔记(深入)”;
在者,我们还可以这样稍微优化一下:
public function downloadImage($url, $path='images/') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); $file = curl_exec($ch); curl_close($ch); $this->saveAsImage($url, $file, $path); } private function saveAsImage($url, $file, $path) { $filename = pathinfo($url, PATHINFO_BASENAME); $resource = fopen($path . $filename, 'a'); fwrite($resource, $file); fclose($resource); }
立即学习“PHP免费学习笔记(深入)”;
封装成类之后,我们可以这样调用代码来下载图片:
$spider = new Spider(); foreach ( $images as $url ) { $spider->downloadImage($url); }
立即学习“PHP免费学习笔记(深入)”;
这样,对付基本的远程图片下载就OK了。
相关推荐:
PHP下载远程文件类的定义与用法详解
PHP下载远程图片及保存到本地代码
PHP实现下载远程文件类相关代码
立即学习“PHP免费学习笔记(深入)”;
以上就是PHP下载远程图片保存到本地的方法详解的详细内容,更多请关注php中文网其它相关文章!
今天关于PHP下载远程图片并保存到本地方法总结和php 下载 远程文件的分享就到这里,希望大家有所收获,若想了解更多关于php 完美实现下载远程图片保存到本地(保存微信头像)、php 采集远程网页图片并保存到本地、PHP下载远程图片保存到本地、PHP下载远程图片保存到本地的方法详解等相关知识,可以在本站进行查询。
本文标签: