<?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