PHP实现的下载远程图片自定义函数分享


Posted in PHP onJanuary 28, 2015
<?php

/**

 * PHP下载远程图片到本地

 *

 * @param $url string 远程文件地址

 * @param $filename string 保存后的文件名(为空时则为随机生成的文件名,否则为原文件名)

 * @param $fileType array 允许的文件类型

 * @param $dirName string 文件保存的路径(路径其余部分根据时间系统自动生成)

 * @param $type int 远程获取文件的方式

 * @return json 返回文件名、文件的保存路径

 * @author blog.snsgou.com

 */

function getImage($url, $fileName = '', $dirName, $fileType = array('jpg', 'gif'), $type = 1)

{

 if ($url == '')

 {

  return false;

 }
 // 获取文件原文件名

 $defaultFileName = basename($url);
 // 获取文件类型

 $suffix = substr(strrchr($url, '.'), 1);

 if (!in_array($suffix, $fileType))

 {

  return false;

 }
 // 设置保存后的文件名

 $fileName = $fileName == '' ? time() . rand(0, 9) . '.' . $suffix : $defaultFileName;
 // 获取远程文件资源

 if ($type)

 {

  $ch = curl_init();

  $timeout = 15; // 超时时间

  curl_setopt($ch, CURLOPT_URL, $url);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

  $file = curl_exec($ch);

  curl_close($ch);

 }

 else

 {

  ob_start();

  readfile($url);

  $file = ob_get_contents();

  ob_end_clean();

 }
 // 设置文件保存路径

 $dirName = $dirName . '/' . date('Y', time()) . '/' . date('m', time()) . '/' . date('d', time()) . '/';

 if (!file_exists($dirName))

 {

  mkdir($dirName, 0777, true);

 }
 // 保存文件

 $res = fopen($dirName . $fileName, 'a');

 fwrite($res, $file);

 fclose($res);
 return "{'fileName':$fileName, 'saveDir':$dirName}";

}


// 举例

// 返回:{'fileName':13668030896.jpg, 'saveDir':/www/test/img/2013/04/24/}

echo getImage('http://img.wan.renren.com/images/2013/0430/1367294093164.jpg', '', 'd:/PHP/data', array('jpg', 'gif'), 1);
PHP 相关文章推荐
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
PHP 遍历文件实现代码
May 04 PHP
PHP关联链接常用代码
Nov 05 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
jQuery+php简单实现全选删除的方法
Nov 28 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
php中的explode()函数实例介绍
Jan 18 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 #PHP
php+mysqli使用预处理技术进行数据库查询的方法
Jan 28 #PHP
php中使用session防止用户非法登录后台的方法
Jan 27 #PHP
php中session与cookie的比较
Jan 27 #PHP
php实现session自定义会话处理器的方法
Jan 27 #PHP
php实现检查文章是否被百度收录
Jan 27 #PHP
php创建session的方法实例详解
Jan 27 #PHP
You might like
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
php时间戳转换代码详解
2019/08/04 PHP
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
Django中几种重定向方法
2015/04/28 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
Python字典的核心底层原理讲解
2019/01/24 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
Python list与NumPy array 区分详解
2019/11/06 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
某公司C#程序员面试题笔试题
2014/05/26 面试题
在校生钳工实习自我鉴定
2013/09/19 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
签订劳动合同通知书
2015/04/16 职场文书
走进科学观后感
2015/06/18 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS