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+MySql编写聊天室
Oct 09 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
队列在编程中的实际应用(php)
Sep 04 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
解析php中的escape函数
Jun 29 PHP
PHP内核探索:变量概述
Jan 30 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
php类的自动加载操作实例详解
Sep 28 PHP
一个实用的php验证码类
Jul 06 PHP
PHP常用header头定义代码示例汇总
Aug 29 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
微信小程序轮播图swiper代码详解
2020/12/01 Javascript
python实现端口转发器的方法
2015/03/13 Python
python简单实现旋转图片的方法
2015/05/30 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
使用Python读取大文件的方法
2018/02/11 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
django使用channels实现通信的示例
2020/10/19 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
数据库专业英语
2012/11/30 面试题
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
教育专业自荐书范文
2013/12/17 职场文书
终止合同协议书
2014/04/17 职场文书
大二学习计划书范文
2014/04/27 职场文书
党支部特色活动方案
2014/08/20 职场文书
社区活动策划方案
2014/08/21 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
Mysql中常用的join连接方式
2022/05/11 MySQL