当前位置: 首页 > news >正文

抓取远程图片到本地,你会用什么函数?

方式有:

<?php
function getImage($url,$filename="")
{

    if ($url == "") return false;
    if ($filename === "") {
        $ext_name = strrchr($url,'.'); //获取图片的扩展名
        if (!in_array($ext_name, ['.gif', '.jpg', '.bmp', '.png'])) {
            return false;
        }
        $filename = time() . $ext_name;

    }
    // 开始捕获
    // 文件 保存路径
    ob_start();
    /*
     * ob_start()在服务器打开一个缓冲区来保存所有的输出。
     * 所以在任何时候使用echo ,输出都将被加入缓冲区中,
     * 直到程序运行结束或者使用ob_flush()来结束。
     * 然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。
     *
     * 使用ob_start()把输出那同输出到缓冲区,而不是到浏览器。
     */
    readfile($url);
    /*
     * readfile() 函数输出一个文件。
     *该函数读入一个文件并写入到输出缓冲。
     */
    $img_date = ob_get_contents();
    /*
     * 然后用ob_get_contents得到缓冲区的数据。
     */
    ob_end_clean();
    /*
     * 函数ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。
     */
    $size = strlen($img_date);
    //文件大小
    $local_file = fopen($filename, 'a');
    fwrite($local_file, $img_date);
    fclose($local_file);
    return $filename;
}

echo getImage("http://www.mysqltutorial.org/wp-content/uploads/2008/05/mysqltutorial.gif");

另外还有:

<?php

$img = file_get_contents('http://www.mysqltutorial.org/wp-content/uploads/2008/05/mysqltutorial.gif');

file_put_contents('a.gif', $img);

echo '<img src="a.gif">';

这段抓取远程图片至本地在运行中360极速、火狐、谷歌、猎豹没有出现错误,可以正常运行。

还有:

<?php

$img = file_get_contents('http://www.mysqltutorial.org/wp-content/uploads/2008/05/mysqltutorial.gif');

echo $img;

该段代码在360极速浏览器中运行没有出现错误,但是在火狐、谷歌、猎豹浏览器中出现了“乱码”。

转载于:https://blog.51cto.com/laok8/2359208

相关文章:

  • ELK 企业内部日志分析系统
  • Handler中的IdleHandler
  • 企业级 SpringBoot 教程 (十七)上传文件
  • bboss v5.5.3 发布,Elasticsearch Rest Client
  • 4.Git文件系统
  • ios监听键盘删除事件
  • 秒懂正则表达式
  • 怎么把GPU上训练的模型转到TPU或者CPU上去?DeepMind发布新工具支招
  • 互联网项目中mysql应该选什么事务隔离级别
  • 转载【阿里员工排查问题的工具清单,总有一款适合你】
  • 一、图书管理系统
  • 来自Google资深工程师的API设计最佳实践
  • grid布局基本概念
  • 论网站经营对一个企业的重要性
  • 持续交付基金会成立!Jenkins,Spinnaker等为首批捐赠项目
  • 【Leetcode】101. 对称二叉树
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Angular Elements 及其运作原理
  • avalon2.2的VM生成过程
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JS变量作用域
  • Material Design
  • quasar-framework cnodejs社区
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue的全局变量和全局拦截请求器
  • 闭包--闭包之tab栏切换(四)
  • 简单易用的leetcode开发测试工具(npm)
  • 前端面试之闭包
  • 网页视频流m3u8/ts视频下载
  • 一个SAP顾问在美国的这些年
  • 一些关于Rust在2019年的思考
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #AngularJS#$sce.trustAsResourceUrl
  • #Linux(权限管理)
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • %@ page import=%的用法
  • (补)B+树一些思想
  • (二)JAVA使用POI操作excel
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (九)信息融合方式简介
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十三)Maven插件解析运行机制
  • (转)一些感悟
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET Project Open Day(2011.11.13)
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • ::
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [383] 赎金信 js
  • [Assignment] C++1
  • [BUUCTF]-Reverse:reverse3解析