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缩略图生成程式(需要GD库支持)
Mar 06 PHP
mysql 性能的检查和优化方法
Jun 21 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
UTF-8正则表达式如何匹配汉字
Aug 03 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
YII框架中使用memcache的方法详解
Aug 02 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
通过源码解析Laravel的依赖注入
Jan 22 PHP
asp函数split()对应php函数explode()
Feb 27 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
Laravel实现批量更新多条数据
Apr 06 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 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
服务器web工具 php环境下
2010/12/29 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
php object转数组示例
2014/01/15 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
php实现的简单检验登陆类
2015/06/18 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
Python中编写ORM框架的入门指引
2015/04/29 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
python区分不同数据类型的方法
2019/10/14 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
基于keras中的回调函数用法说明
2020/06/17 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
工厂仓管员岗位职责
2014/01/01 职场文书
初中校园广播稿
2014/02/02 职场文书
售后服务承诺书模板
2014/05/21 职场文书
园林技术专业求职信
2014/07/28 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python