php实现文件隐藏服务器真实地址(二)

php实现文件隐藏服务器真实地址(二)

需求:

  1. 网站图片储存在不同的amazon s3上,因为各方面的考虑,amazon s3的图片服务器设置成了服务器1,服务器2。其中服务器1存储不超过90天的内容,服务器2作为存档服务器,存储在服务器1上超过90天的内容。amazon s3做了referer防盗链处理。

  2. 网站图片需要通过统一网址访问,让服务器做代理,走服务器流量。(VPS流量费很贵,请注意这点)

要达到以上目的,需要做以下两件事情

代理访问并获取文件

function get_proxy_site_page( $url ){
    // create a new cURL resource
    $ch = curl_init();

    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); // 发送请求
    curl_setopt($ch, CURLOPT_REFERER, "https://www.yeniugo.com/");//添加referer

    $urlContent = curl_exec($ch);
    $found = false; // 如果请求没有发送失败
    if(!curl_errno($ch))
    {
        /** 再检查http响应码是否为200 */
        $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($statusCode == 200) {
            $found = true;
            $info = curl_getinfo($ch);
            header('Content-Type: '.$info['content_type']);
            echo $urlContent;
            $found = true;
        }
    }else{
    }
    curl_close($ch);
    return $found;
}

逻辑思考

剩下的就是逻辑问题了。逻辑没有什么好说的,只是最后有一个小问题,需要注意一下。
如果没有找到图片的话怎么处理的问题。
这里有两种方案

  1. 返回404错误
  2. 返回404错误图片,如果选择这种方式,从用户体验而言是比较友好的方式,但由于这里图片可能经常遇到404问题,所以建议是把这个404图片上传到一个免费的服务器上面。这里选择比较多,就不在这里一一说明了。

图片防盗链处理

原理,检查referer是否是该网站,是的就为真,否则返回404。

总结

这个功能的实现,我在很早的时候,大概10年前就想做这个的想法,但一直不知道怎么做,现在终于实现了,开心。
最后通过html源码发现,我的网址显示的依旧是原始的网址。
有一个问题需要注意,如果通过浏览器的调试工具,已经看不到图片的真实地址了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注