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垃圾回收机制简单说明
Jul 22 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
PHP关联链接常用代码
Nov 05 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
php多文件上传实现代码
Feb 20 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
php cli模式下获取参数的方法
May 05 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
PHP针对redis常用操作实例详解
Aug 17 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和ACCESS写聊天室(二)
2006/10/09 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
php 文件上传实例代码
2012/04/19 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
理解python正则表达式
2016/01/15 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
详解python:time模块用法
2019/03/25 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
科级干部考察材料
2014/02/15 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
js Proxy的原理详解
2021/05/25 Javascript
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle