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的access操作类
Apr 09 PHP
php 图片上传类代码
Jul 17 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
PHP仿盗链代码
Jun 03 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
php操作mysql数据库的基本类代码
Feb 25 PHP
ThinkPHP调试模式与日志记录概述
Aug 22 PHP
基于PHP实现的事件机制实例分析
Jun 18 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 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(6) 面向对象
2010/02/16 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
python机器学习之KNN分类算法
2018/08/29 Python
python实现三次样条插值
2018/12/17 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
大学生党员自我批评
2014/02/14 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
旷课检讨书范文
2014/10/30 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
放假通知范文
2015/04/14 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
《坐井观天》教学反思
2016/02/18 职场文书