2

我正在尝试以表单输入值显示用户国家/地区(基于他们的 IP)。

到目前为止,这是我的代码..

<input style="display:block" type="text" name="country" id="country" value="<?php               
$pageContent = file_get_contents('http://freegeoip.net/json/echo $_SERVER['REMOTE_ADDR']');
$parsedJson  = json_decode($pageContent);
echo $parsedJson->country_name; ?>" />

我正在使用 PHP JSON-decode 从“http://freegeoip.net/json/(IP ADDRESS)”获取数据。

该网站对 IP 地址进行地理编码并返回国家名称。

我想要做的是能够将用户 IP 地址替换为该网址,然后返回用户的国家/地区名称。我能想到的最好方法是使用

<?php echo $_SERVER['REMOTE_ADDR']; ?> 

但是当我把它放进去时,我得到了一个服务器错误。

我该怎么做呢?

4

4 回答 4

11
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);

您不能echo在函数内使用。相反,您应该使用连接运算符

此外,更好的代码应该是这样的:

<?php               
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);
$parsedJson  = json_decode($pageContent);
?>
<input style="display:block" type="text" name="country" id="country" value="<?php echo htmlspecialchars($parsedJson->country_name); ?>" />
于 2012-05-29T19:54:44.343 回答
2
$pageContent = file_get_contents('http://freegeoip.net/json/' . $_SERVER['REMOTE_ADDR']);

无需回显到字符串参数...只需与..

于 2012-05-29T19:55:03.003 回答
1

GeoIP最近在一些项目中一直需要这些服务。我创建了一个 ** PHP wrapper**,以防其他人为此寻找PHP帮助。

可以在https://github.com/DaanDeSmedt/FreeGeoIp-PHP-Wrapper找到

于 2017-03-30T09:33:20.617 回答
0

由于 Freegeoip 将成为一项付费服务​​ ( https://ipstack.com/ ),如果您想要一个免费的简单服务,您可以使用 ip-api.com 而不是 freegeoip.net :

function getDataOfIp($ip) {
    try {
        $pageContent = file_get_contents('http://ip-api.com/json/' . $ip);
        $parsedJson  = json_decode($pageContent);
        return [
            "country_name" => $parsedJson->country,
            "country_code" => $parsedJson->countryCode,
            "time_zone" => $parsedJson->timezone
        ];
    } 
    catch (Exception $e) {
        return null;
    }
}

您应该根据需要的数据调整返回值。

于 2018-06-19T10:32:48.797 回答