问题描述
我已经实施了 AMP 电子邮件,因此当客户端通过电子邮件正文内部的 amp-form
提交任何数据时,请求会发送到谷歌,谷歌通过 HTTP 请求将数据提交到我的服务器,但随着 AMP 请求的到来从 Google 服务器而不是客户端的浏览器到我的服务器,我无法通过普通的 PHP $_SERVER
变量获取客户端的 IP。
AMP EMAILS 是否有任何解决方法,我可以通过它在我的 PHP Apache 后端获取客户端的 IP?
以下是我目前用来获取 IP 的代码,但无法在任何 $_SERVER
键中获取客户端 IP:
function get_ip_address()
{
$str="";
foreach (array('HTTP_CLIENT_IP','HTTP_X_FORWARDED_FOR','HTTP_X_FORWARDED','HTTP_X_CLUSTER_CLIENT_IP','HTTP_FORWARDED_FOR','HTTP_FORWARDED','REMOTE_ADDR') as $key){
if (array_key_exists($key,$_SERVER) === true)
{
foreach (explode(',',$_SERVER[$key]) as $ip)
{
$ip = trim($ip); // just to be safe
if (filter_var($ip,FILTER_VALIDATE_IP,FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false)
{
$str .= $key." => ".$ip." ";;
}
}
}
}
return $str;
}
编辑: 根据 Su Zhang 对 his answer 的评论,由于隐私问题,我们无法获取用户的 IP,因此我可以根据客户端的地理位置获取附近 IP 的解决方案/解决方法也将为我工作。
解决方法
AMP 电子邮件提供商不会透露用户的 IP 地址,否则会泄露隐私。您无法通过表单提交获取用户的 IP 地址。