GVKun编程网logo

PHP下载远程图片并保存到本地方法总结(php 下载 远程文件)

23

本篇文章给大家谈谈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 完美实现下载远程图片保存到本地(保存微信头像)

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代
/**
* 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 采集远程网页图片并保存到本地

php 采集远程网页图片并保存到本地

<script>ec(2);</script>

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下载远程图片保存到本地

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实现下载远程图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

在使用 PHP 做简单的爬虫的时候,我们经常会遇到需要下载远程图片的需求,所以下面来简单实现这个需求。

1.使用 curl

比如我们有下面这两张图片:

$images = [
  &#39;https://dn-laravist.qbox.me/2015-09-22_00-17-06j.png&#39;,
  &#39;https://dn-laravist.qbox.me/2015-09-23_00-58-03j.png&#39;
];
登录后复制

立即学习“PHP免费学习笔记(深入)”;

第一步,我们可以直接来使用最简单的代码实现:

function download($url, $path = &#39;images/&#39;)
{
  $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, &#39;a&#39;);
  fwrite($resource, $file);
  fclose($resource);
}
登录后复制

立即学习“PHP免费学习笔记(深入)”;

那在下载远程图片的时候就可以这样:

foreach ( $images as $url ) {
  download($url);
}
登录后复制

立即学习“PHP免费学习笔记(深入)”;

2.封装一个类

缕清思路之后,我们可以将这个基本的功能封装到一个类中:

class Spider {

  public function downloadImage($url, $path = &#39;images/&#39;)
  {
    $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, &#39;a&#39;);
    fwrite($resource, $file);
    fclose($resource);
  }
}
登录后复制

立即学习“PHP免费学习笔记(深入)”;

在者,我们还可以这样稍微优化一下:

public function downloadImage($url, $path=&#39;images/&#39;)
  {
    $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, &#39;a&#39;);
    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下载远程图片保存到本地的方法详解等相关知识,可以在本站进行查询。

本文标签: