我想知道是否有人可以为我提供教程或源代码,如果人们将我的网站图像放到他们的论坛或网站中,它会显示水印,但如果他们查看它在我的网站上他们不会是水印?
答案 0 :(得分:4)
虽然Piskvor 100%正确,但我只想添加如何来获取PHP中的引荐来源。
使用$_SERVER['HTTP_REFERER']
获取客户端发送的Referer标头。如果您的网站是“www.example.com”,则推荐人应始终将“www.example.com”作为域名。
现在,要验证域名,让我们使用parse_url()
将URL解析为数组,并提取不同的部分。它返回一个数组,让我们调用此$url
,并获取域名,使用$url['host']
。现在将其与您自己的域名进行比较,以确保它在您的域名中。
完整示例:
$referrer = $_SERVER['HTTP_REFERER'];
$url = parse_url($referrer);
if($url['host'] == 'www.example.com')
{
// Is from www.example.com
}else{
// Is from other website
}
答案 1 :(得分:3)
HTTP本质上是Web的核心协议 - 用于传输超文本(网页),图像和其他媒体。从一开始,HTTP被设计为无状态 - 除此之外,这意味着无法查找图像请求是否“属于”某个页面或其他页面。
HTTP中基本上有两种解决方法,但100%可靠:cookies和Referer标头。
使用Cookie,您可以在用户访问您的网页时设置Cookie,然后在提供图片时进行检查。这可能会在第一次进入页面时遇到并发问题。
使用Referer
,浏览器向图像请求发送加载图像的URL。不幸的是,用户或安全软件可以轻松修改或删除引用者。
我建议您使用Referer字段 - 虽然它不是100%可靠,但是大多数人都不会打扰它,而那些会烦恼的人,他们会克服任何其他保护。
您需要通过脚本(例如PHP)提供图像。
http://example.com/img.php?id=12345 - 支票的伪代码,水印本身的PHP:
check if the image with given ID exists, else throw a 404 and end
check the referer - if it matches your site, just readfile() the relevant image and exit
if we're here, referer is wrong - you'll need the watermark:
// PHP code from now on
$original = imagecreatefromjpeg($original_image_path);
$watermark = imagecreatefromjpeg($watermark_image_path);
imagecopymerge ( $original, $watermark, 0,0,0,0, $watermark_width, $watermark_height, $opacity);
header('Content-Type: image/jpeg');
imagejpeg($original);
exit;
答案 2 :(得分:0)
对于大图片,Piskvor的答案对服务器资源来说过于沉重。可能还存在客户端缓存问题,从而不必要地增加延迟。
相反,我会在.htaccess文件中实现引荐检测,以便所有在引用或空引用中使用您的域名的请求直接进入没有PHP处理的图像。任何其他情况都意味着热链接,因此将提供水印脚本。