如何使用PHP追踪热门链接者的IP地址

4

我在服务器上有一张名为 /images/pic.jpg 的图片。我想要追踪那些通过直接访问图片的 URL (如 www.domain.com/images/pic.jpg)尝试访问该图片的用户的 IP 地址。我可以通过以下方式跟踪手动用户的 IP 地址:

<?php $ipAddress = $_SERVER['REMOTE_ADDR']; ?>

1
你需要通过PHP脚本处理".jpg"文件,或为所有图像创建一个自定义的处理程序,例如:"image.php?name=pic.jpg",并禁止直接链接到这些图像(在“/images/”文件夹中使用“.htaccess”封锁)。 - mellamokb
唯一能够判断某人是通过热链接还是直接加载的方法是通过HTTP referer,但这种方法很容易被伪造,不可靠等。 - Marc B
2个回答

5
你可以创建一个拦截PHP脚本,负责处理存储在特定文件夹中的所有图像的请求。假设你的所有图像都位于“images/”文件夹中。你只需要创建一个重写规则,将该文件夹内所有文件的请求重定向到一个PHP脚本即可。
RewriteRule images/(.+)\.(jpg|gif|png) images.php?image=$1.$2

这样做可以使您仍然保留使用标记内的图像的能力,就像以前一样。

<img src="images/logo.png" />

请注意,这种方法可能会对您的系统性能产生重大影响,因为现在所有的图片资源请求都会创建处理开销,由于每次都会调用PHP。


一个妥协的方法是添加一个规则条件 RewriteCond %{HTTP_REFERER} !^http://yoursite.com/,这样只有不是从你的页面引用的请求才会被重定向进行分析。是的,这个头部可以被欺骗,但是通过标准浏览器访问的热链接图像不会这样做。 - TerryE

4
如果他们直接访问图像,你不能通过PHP来跟踪他们,除非解析你的访问日志并查看谁正在请求该文件。
你最好的选择是使用PHP来提供图像本身。这样,你可以通过PHP跟踪谁在请求它。
例如:
<img src="image.php?imagename.jpg">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接