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 PDO中文乱码解决办法
Jul 20 PHP
PHP中的float类型使用说明
Jul 27 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
php二分查找二种实现示例
Mar 12 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
Apr 02 PHP
php实现四舍五入的方法小结
Mar 03 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
php面向对象编程self和static的区别
May 08 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
Laravel框架处理用户的请求操作详解
Dec 20 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
SONY SRF-40W电路分析
2021/03/02 无线电
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
PHP $_SERVER详解
2009/01/16 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP多态代码实例
2015/06/26 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
javascript 避免闭包引发的问题
2009/03/17 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
Python中的super用法详解
2015/05/28 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
对python周期性定时器的示例详解
2019/02/19 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
经贸专业毕业生求职信
2014/03/23 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL