需求:
剩下的就是逻辑问题了。逻辑没有什么好说的,只是最后有一个小问题,需要注意一下。
如果没有找到图片的话怎么处理的问题。
这里有两种方案
原理,检查referer是否是该网站,是的就为真,否则返回404。
这个功能的实现,我在很早的时候,大概10年前就想做这个的想法,但一直不知道怎么做,现在终于实现了,开心。
最后通过html源码发现,我的网址显示的依旧是原始的网址。
有一个问题需要注意,如果通过浏览器的调试工具,已经看不到图片的真实地址了。
- 网站图片储存在不同的amazon s3上,因为各方面的考虑,amazon s3的图片服务器设置成了服务器1,服务器2。其中服务器1存储不超过90天的内容,服务器2作为存档服务器,存储在服务器1上超过90天的内容。amazon s3做了referer防盗链处理。
网站图片需要通过统一网址访问,让服务器做代理,走服务器流量。(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;
}
逻辑思考
剩下的就是逻辑问题了。逻辑没有什么好说的,只是最后有一个小问题,需要注意一下。
如果没有找到图片的话怎么处理的问题。
这里有两种方案
- 返回404错误
- 返回404错误图片,如果选择这种方式,从用户体验而言是比较友好的方式,但由于这里图片可能经常遇到404问题,所以建议是把这个404图片上传到一个免费的服务器上面。这里选择比较多,就不在这里一一说明了。
图片防盗链处理
原理,检查referer是否是该网站,是的就为真,否则返回404。
总结
这个功能的实现,我在很早的时候,大概10年前就想做这个的想法,但一直不知道怎么做,现在终于实现了,开心。
最后通过html源码发现,我的网址显示的依旧是原始的网址。
有一个问题需要注意,如果通过浏览器的调试工具,已经看不到图片的真实地址了。
评论
发表评论