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 相关文章推荐
将PHP作为Shell脚本语言使用
Oct 09 PHP
zend framework多模块多布局配置
Feb 26 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
PHP实现股票趋势图和柱形图
Feb 07 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
php中访问修饰符的知识点总结
Jan 27 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
无数据库的详细域名查询程序PHP版(3)
2006/10/09 PHP
php实现图片缩放功能类
2013/12/18 PHP
PHP中的表达式简述
2016/05/29 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
两个DIV等高的JS的实现代码
2007/12/23 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Python中如何获取类属性的列表
2016/12/26 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
分分钟入门python语言
2018/03/20 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
在Python中使用Neo4j的方法
2019/03/14 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
利用python 下载bilibili视频
2020/11/13 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
幼儿园家长会欢迎词
2014/01/09 职场文书
建议书怎么写
2014/03/12 职场文书
室内设计专业自荐信
2014/05/31 职场文书
教师业务学习材料
2014/12/16 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书