1:file_get_contents

  1. <?php
  2. //读取远程图片,是二进制数据
  3. $image = file_get_contents('https://files-cdn.cnblogs.com/files/lovebing/head.gif');
  4. 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);