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扩展函数
Oct 09 PHP
用php+javascript实现二级级联菜单的制作
May 06 PHP
PHP伪静态写法附代码
Jun 20 PHP
php中fsockopen用法实例
Jan 05 PHP
php上传文件问题汇总
Jan 30 PHP
如何使用php实现评委评分器
Jul 31 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 PHP
php 原生分页
Apr 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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
Ext grid 添加右击菜单
2009/11/26 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Python基本语法经典教程
2016/03/11 Python
python3中str(字符串)的使用教程
2017/03/23 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
儿童python练习实例
2018/05/27 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
Python try except else使用详解
2021/01/12 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
会计学应届毕业生推荐信
2013/11/04 职场文书
责任心演讲稿
2014/05/14 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
生活部的活动方案
2014/08/19 职场文书
个人职业及收入证明
2014/10/13 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
Python实现byte转integer
2021/06/03 Python
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL