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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
谈谈PHP的输入输出流
Feb 14 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
PHP Squid中可缓存的动态网页设计
Sep 17 PHP
一些使用频率比较高的php函数
Oct 03 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 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 XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
python实现PID算法及测试的例子
2019/08/08 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
比利时买床:Beter Bed
2017/12/06 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
拉丁舞学习者的自我评价
2013/10/27 职场文书
出纳的岗位职责
2013/11/09 职场文书
委托公证书范本
2014/04/03 职场文书
超市理货员岗位职责
2014/07/04 职场文书
销售会议开幕词
2015/01/28 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python