php获取远程图片并下载保存到本地的方法分析


Posted in PHP onOctober 08, 2016

本文实例讲述了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("https://3water.com /6648d73db0edd1e89f3d62f7.jpg", "");
if ($img):echo '<pre><img src="' . $img . '"></pre>';
//如果返回值为真,这显示已经采集到服务器上的图片
else:echo "false";
endif;
//否则,输出采集失败
?>

其实上面的下载方式小编最喜欢的不是这两个而是curl保存异步下载图片会比较好。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
我的论坛源代码(七)
Oct 09 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
php文件上传的简单实例
Oct 19 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 PHP
php解析json数据实例
Aug 19 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
分享一则PHP定义函数代码
Feb 26 PHP
js代码实现微博导航栏
Jul 30 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 #PHP
php文件类型MIME对照表(比较全)
Oct 07 #PHP
php中文字符串截取多种方法汇总
Oct 06 #PHP
PHP微信红包生成代码分享
Oct 06 #PHP
php下载文件超时时间的设置方法
Oct 06 #PHP
详谈php静态方法及普通方法的区别
Oct 04 #PHP
php操作路径的经典方法(必看篇)
Oct 04 #PHP
You might like
How do I change MySQL timezone?
2008/03/26 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
php5.3 注意事项说明
2013/07/01 PHP
php利用事务处理转账问题
2015/04/22 PHP
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python基础教程项目三之万能的XML
2018/04/02 Python
python for和else语句趣谈
2019/07/02 Python
PyTorch-GPU加速实例
2020/06/23 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
JAVA代码查错题
2014/10/10 面试题
试述DBMS的主要功能
2016/11/13 面试题
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
优秀护士先进事迹
2014/05/08 职场文书
世界地球日活动总结
2015/02/09 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript