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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
PHP+Tidy-完美的XHTML纠错+过滤
Apr 10 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
PHP之数组学习
May 29 PHP
一个PHP并发访问实例代码
Sep 06 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
PHP常见数组函数用法小结
Mar 21 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
python爬虫基本知识
2018/03/05 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
Python datetime包函数简单介绍
2019/08/28 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
物业管理个人自我评价
2013/11/08 职场文书
高中生活自我鉴定
2014/01/18 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
科学发展观演讲稿
2014/09/11 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android