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中的实现trim函数代码
Mar 19 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
Uncaught exception com_exception with message Failed to create COM object
Jan 11 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
Aug 10 PHP
php实现的css文件背景图片下载器代码
Nov 11 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
帝国cms目录结构分享
Jul 06 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
实现php删除链表中重复的结点
Sep 27 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
获取body标签的两种方法
2011/10/13 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python匹配中文的正则表达式
2016/05/11 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
numpy中矩阵合并的实例
2018/06/15 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
品管员岗位职责
2013/11/10 职场文书
目标责任书范本
2014/04/16 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
新员工辞职信范文
2015/05/12 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
mysql知识点整理
2021/04/05 MySQL
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript