码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-03-07 00:35:00      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:缓冲   关闭   出现   文件大小   远程   乱码   结束   扩展   file   

方式有:

<?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极速浏览器中运行没有出现错误,但是在火狐、谷歌、猎豹浏览器中出现了“乱码”。

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

标签:缓冲   关闭   出现   文件大小   远程   乱码   结束   扩展   file   

原文地址:https://blog.51cto.com/laok8/2359208

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!