1:file_get_contents
<?php
//读取远程图片,是二进制数据
$image = file_get_contents('https://files-cdn.cnblogs.com/files/lovebing/head.gif');
file_put_contents('./images/name.jpg', $image);//将二进制数据存为图片
读取远程/本地图片的信息流,并且输出图片
<?php
header( "Content-type: image/jpeg");
$image = file_get_contents('http://seiyongev.com/data/upload/ueditor/20190908/5d74681f1be77.jpeg');
echo $image;
exit();
<?php
//还可以读取网页内容
$name ='https://www.baidu.com/';
$str = file_get_contents($name);//获取的是网页的源码
file_put_contents('./images/a.html', $str);//将源码写入到文件中
echo $str;//直接输出源码就会显示出界面
2 使用 curl kɜːrl
一般我们使用 curl 他可以设置 超时时间 比较方便
<?php
/*
*@通过curl方式获取制定的图片到本地
*@ 完整的图片地址
*@ 要存储的文件名
*/
function getImg($url = "", $filename = "") {
if(is_dir(basename($filename))) {
echo "The Dir was not exits";
return false;
}
//去除URL连接上面可能的引号
// $url = preg_replace( '/(?:^['"]+|['"/]+$)/', '', $url );
//初始化新的会话,返回 cURL 句柄
$hander = curl_init();
$fp = fopen($filename,'wb');
//curl_setopt — 设置 cURL 传输选项
//CURLOPT_URL 需要获取的 URL 地址
curl_setopt($hander,CURLOPT_URL,$url);
//CURLOPT_FILE 设置输出文件,默认为STDOUT (浏览器)。
curl_setopt($hander,CURLOPT_FILE,$fp);
//CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出。
curl_setopt($hander,CURLOPT_HEADER,0);
//CURLOPT_FOLLOWLOCATION 启用时将会根据服务器返回 HTTP 头中的 "Location: " 重定向
curl_setopt($hander,CURLOPT_FOLLOWLOCATION,1);
//直接展示出数据流的话,使用header函数,可以直接在界面上展示出图片来。
//header( "Content-type: image/jpeg");
//curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);//以数据流的方式返回数据,当为false是直接显示出数据流
//CURLOPT_TIMEOUT 允许 cURL 函数执行的最长秒数。
curl_setopt($hander,CURLOPT_TIMEOUT,60);
//或者使用批量传参的方法
/*$options = array(
CURLOPT_URL=> '/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg',
CURLOPT_FILE => $fp,
CURLOPT_HEADER => 0,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_TIMEOUT => 60
);
//为 cURL 传输会话批量设置选项
curl_setopt_array($hander, $options);
*/
//执行 cURL 会话
curl_exec($hander);
//关闭 cURL 会话
curl_close($hander);
fclose($fp);
return true;
}
$url = 'http://seiyongev.com/data/upload/ueditor/20190908/5d74681f1be77.jpeg';
$filename = './images/name.jpg';
getImg($url, $filename);
3.fopen->fread->fwrite->fclose
<?php
function download_remote_file_with_fopen($file_url, $save_to)
{
$in= fopen($file_url, "rb");
$out= fopen($save_to, "wb");
//8192:要读取的最大字节数。
while ($chunk = fread($in,8192))
{
fwrite($out, $chunk, 8192);
}
fclose($in);
fclose($out);
}
$file = 'http://seiyongev.com/data/upload/ueditor/20190908/5d74681f1be77.jpeg';
$filename = './images/name.jpg';
download_remote_file_with_fopen($file, $filename);