我在网站上有一个页面,其中包含访问者的IP地址并通过电子邮件发送到电子邮件帐户。我的目标是使用GeoIP查找工具将IP地址与电子邮件内容中的城市相关联。我想要在电子邮件内容中添加以下命令:geoiplookup $remoteIpAddress
,但是我的尝试没有用。我希望熟悉PHP的人可以指出正确的方向。这是当前正在运行的代码:
<?php
include('session.php');
$yourEmailAddress = "user@example.com";
$emailSubject = "Example Subject";
$remoteIpAddress = $_SERVER['REMOTE_ADDR'];
$emailContent = "Blah Blah Blah: ".$remoteIpAddress;
mail($yourEmailAddress, $emailSubject, $emailContent);
我尝试使用$city = exec("geoiplookup $remoteIpAddress");
设置变量,并将$ emailContent更新为:$emailContent = "Blah Blah Blah: ".$remoteIpAddress .$city;
,但这没有用。我尝试了其他一些变体,尝试使其与shell_exec一起使用,无论是否使用引号,都没有任何效果。希望有人能指出我正确的方向。谢谢!
答案 0 :(得分:4)
例如转到ipstack.com,并获取您的 免费API密钥 。
然后使用以下功能和该服务的新生成的API访问密钥,可以实现您的目标。该服务将为您提供一个stdClass对象,作为具有多个属性的响应,例如:城市。
function lookup($ipAddresses, $token)
{
$userAgent = ' PHP/' . PHP_VERSION . ' CURL/' . curl_version()['version'];
$curl = curl_init();
$url = 'http://api.ipstack.com/' . implode(',', $ipAddresses) . '?access_key=' . $token;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
curl_setopt($curl, CURLOPT_HTTPGET, true);
$info = curl_getinfo($curl);
$response = curl_exec($curl);
curl_close($curl);
return json_decode($response);
}
然后
$ip = $_SERVER['REMOTE_ADDR'];
$response = lookup([$ip], 'Your API Access Key comes here');
$city = $response->city;
var_dump($response, $city);
答案 1 :(得分:1)
您应该做的确实是@marcell建议的内容,并为此使用一些远程API。但是,如果您真的想使用命令来执行此操作,则应执行以下操作:
$geolookup = `geoiplookup {$remoteIpAddress}`;
请注意,我使用的是(`),而不是(')!