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 相关文章推荐
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
php cli 方式 在crotab中运行解决
Feb 08 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
php简单的会话类代码
Aug 08 PHP
php 错误处理经验分享
Oct 11 PHP
关于IIS php调用com组件的权限问题
Jan 11 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
解析php开发中的中文编码问题
Aug 08 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 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
基于mysql的论坛(6)
2006/10/09 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
Javascript 按位与赋值运算符 (&amp;=)使用介绍
2014/02/04 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
python实现实时监控文件的方法
2016/08/26 Python
python实现飞机大战游戏
2020/10/26 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
会议开场欢迎词
2014/01/15 职场文书
《自然之道》教学反思
2014/02/11 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
运动会演讲稿200字
2014/08/25 职场文书
肖申克的救赎观后感
2015/06/02 职场文书