如果另一个服务器/网站从我的服务器加载图像,如何告知


If another server/website load image from my server, how to tell?

关于

我有一个网站,用户可以将图片上传到他们的个人资料中,这样其他人就可以看到它们。然后,当人们观看每个图像时,我将图像显示在在中间。在图像上方有关于已经上传图像的用户的信息。每个图像的url如下所示:http://website.com/image/id

问题

我想让人们在其他人/他们自己的网站上的html图像标签(<img src="http://website.com/image/id">)中使用上述图像地址

直到今天,我有一个功能,如果他们在url后面添加"/img"(http://website.com/image/id/img)并且复制&将它粘贴到-tag中,它会起作用,但如果可能的话,我会以这种方式工作,当我由用户加载的图像时,它会显示为正常,但当它由带有以下url的-tag加载时:http://website.com/image/id它将正确地显示图像。(没有html,带有"页眉图像/png"(。

我尝试了什么

如前所述,我已经有可能在每张图片后添加广告/img,所以它可以使用并嵌入到带有-标签的网站上。我查看了$_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME'], $_SERVER['SERVER_ADDR'],看看这是否有效。但这将不起作用,因为在一个标签中称它为我的服务器ADDR和NAME。当然,REFERER在这种情况下会起作用,但如果访问者只访问了一张图片,而没有浏览整个网站,它会显示没有上传/文件信息的图片。

然后呢

我搜索过这样的案例,要么没有这样的案例要么我不知道该搜索什么。

简而言之

我需要一种方法来检测一个网站是否通过另一个网站上的标签显示,然后显示一个不同的、正确的图像供使用。因为现在如果用户复制&粘贴http://website.com/image/id转换为-标记只会给出一个错误。

注意

我希望你们能帮助我,我已经试着清楚地表明我在寻找什么,我尝试了什么。如果没有,请告诉我。如果上面的某些内容包含拼写错误的单词、语法错误或解释不正确,请深表歉意。我不是每天都说英语,但我尽力了。

请改用$_SERVER['HTTP_ACCEPT']

最流行的浏览器在请求图像时似乎都会发送一个修改后的ACCEPT:标头。

取以下代码:

<?php
file_put_contents('/tmp/accept_headers.txt', $_SERVER['HTTP_ACCEPT'] . PHP_EOL . '---' . PHP_EOL, FILE_APPEND);
?>
<img src="test.php"/>

其中test.php当然是同一个文件,我得到以下结果:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
^ Google Chrome (Linux), direct request
---
image/webp,*/*;q=0.8
^ Google Chrome (Linux), request through <IMG> tag
---
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
^ Firefox (Linux), direct
---
image/png,image/*;q=0.8,*/*;q=0.5
^ Firefox (Linux), <IMG>
---
text/html, application/xhtml+xml, */*
^ IE 11, direct
---
image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5
^ IE 11, <IMG>
---

结论:

读取$_SERVER['HTTP_ACCEPT']值。如果它从image/开始,浏览器会专门请求一个图像,很可能是通过<img>HTML标签请求URL的。对您的脚本进行编程,使其以实物形式作出响应。