You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建可识别引用网站的PHP追踪图片?

用PHP实现图片追踪(获取引用来源URL)

核心思路

当其他网站用<img>标签引用你的PHP脚本(伪装成图片)时,PHP可以读取请求头里的HTTP_REFERER字段拿到引用页面的URL,同时返回真实的图片内容,让对方看起来只是加载了一张普通图片。


步骤1:准备一张真实图片

先找一张你要用来追踪的图片(比如logo.png),把它放在服务器的某个目录下,比如/var/www/html/images/(根据你的服务器实际路径调整)。

步骤2:创建PHP追踪脚本(tracker.php)

在网站根目录创建这个脚本,代码带详细注释:

<?php
// 1. 设置要返回的图片路径(替换成你自己的图片路径)
$imagePath = './images/logo.png';

// 2. 获取引用来源URL(HTTP_REFERER是浏览器发送的请求头,记录了从哪个页面跳过来的)
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '无来源(直接访问或屏蔽了Referer)';

// 3. 获取访问者的IP地址
$visitorIp = $_SERVER['REMOTE_ADDR'];

// 4. 获取当前时间
$currentTime = date('Y-m-d H:i:s');

// 5. 记录追踪信息到日志文件(日志文件要确保PHP有写入权限)
$logContent = "[$currentTime] 来源: $referrer | IP: $visitorIp\n";
file_put_contents('./image_tracker.log', $logContent, FILE_APPEND | LOCK_EX);

// 6. 设置HTTP响应头,告诉浏览器这是一张图片
$imageInfo = getimagesize($imagePath);
header('Content-Type: ' . $imageInfo['mime']);
// 禁止浏览器缓存图片,确保每次引用都会触发追踪
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');

// 7. 输出图片内容
readfile($imagePath);
exit;
?>

步骤3:配置权限(重要)

  • 确保image_tracker.log文件存在,或者让PHP有创建文件的权限(可手动创建文件后设置权限为664,或让服务器用户如www-data拥有该文件的写入权限)。
  • 图片文件路径要正确,确保PHP能读取到这张图片。

步骤4:测试追踪功能

  1. 在其他网站(或本地搭建的另一个页面)添加引用代码:
<img src="https://你的域名/tracker.php" alt="追踪图片">
  1. 访问那个引用图片的页面,然后查看服务器上的image_tracker.log文件,就能看到来源URL和访问IP了。

注意事项

  • HTTP_REFERER可能为空:有些浏览器或隐私插件会屏蔽Referer头,或者用户直接在地址栏访问tracker.php时,这个字段就是空的,代码里已做兼容处理。
  • 图片缓存问题:如果浏览器缓存了图片,后续访问可能不会触发PHP脚本,代码里加了禁止缓存的响应头,也可以在引用时加随机参数(比如src="https://你的域名/tracker.php?r=<?php echo rand(); ?>")来避免缓存。
  • 性能考虑:如果访问量很大,用文件记录日志可能有性能问题,这时可以换成数据库(比如MySQL)存储追踪数据。

内容的提问来源于stack exchange,提问作者user20357582

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:05:15