PHP获取发送请求的服务器域名

搭建了一个图床网站,想要检查访问图床网站的服务器域名是否与用户预留的服务器域名相同。通过PHP怎么来实现。
例如,我的服务器域名为www.example.cn,用户的服务器域名为www.user.cn,用户上传了图片之后就会生成一个用户调用图片的链接,www.example.cn/source.php?附带各种参数
用户可以直接通过

<img src="www.example.cn/source.php?附带的参数">

直接调用图片,我现在source.php中添加代码,来获取用户用户服务器的域名www.user.cn,但是看论坛中的方法,都只能获取到自己的服务器域名www.example.cn,应该怎样来获取用户的域名

获取访问图床网站的用户域名的方法因实际情况而异,但以下是几个可能的方案:

  1. 使用 HTTP 头信息:可以使用 PHP 中的 $_SERVER 超全局变量来获取一些 HTTP 请求头部信息,如 HTTP_HOST。这个变量包含了客户端请求中 Host 头部字段的值,因此可以用来判断用户预留的服务器域名是否匹配。

例如,在 source.php 中添加以下代码:

$userDomain = $_SERVER['HTTP_HOST'];
if ($userDomain === 'www.user.cn') {
    // 进行图片处理或返回图片 URL
} else {
    // 不允许访问,返回错误提示或 403 Forbidden 状态码等
}

请注意,由于 HTTP_HOST 是从 HTTP 请求中提取的,因此在存在代理、负载均衡、CDN 等网络层设备时,它的值可能不同于实际请求的域名。如果需要更精确地确定访问来源,则需要根据实际情况对每种类型的代理或网络设备做出相应的处理。

  1. 在上传图片时添加额外参数:除了在图片 URL 中添加参数之外,还可以在上传图片时通过其他方式将用户域名传递给服务器。例如,可以在表单中添加一个隐藏字段,将用户域名作为其中的值,并在图像上传成功后保存这个值。

然后,可以在 source.php 中读取该值,进行相关判断。例如:

$userDomain = isset($_POST['user_domain']) ? $_POST['user_domain'] : '';
if ($userDomain === 'www.user.cn') {
    // 进行图片处理或返回图片 URL
} else {
    // 不允许访问,返回错误提示或 403 Forbidden 状态码等
}

请注意,这种方法需要在上传图片的表单中添加相应的 HTML 元素和 PHP 后端逻辑,因此相对于第一种方案更加麻烦。

希望这些方法能够辅助您解决问题!