包含Shell命令或Linux工具的PHP变量

时间:2019-11-11 16:04:43

标签: php html

我在网站上有一个页面,其中包含访问者的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一起使用,无论是否使用引号,都没有任何效果。希望有人能指出我正确的方向。谢谢!

2 个答案:

答案 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}`;
  

请注意,我使用的是(`),而不是(')!