2017-09-27 218 views
1

嗨我想输出国家代码到控制台或通过javascript,所以我可以做一些条件格式。继承人我的代码:输出国家代码到控制台

<?php 
    $ip = $_SERVER['REMOTE_ADDR']; 
    $details = json_decode(file_get_contents("http://ipinfo.io/{$ip}")); 
    echo("<script>console.log('PHP: ".json_encode($details->country)."'); 
    </script>"); 
?> 

我在控制台输出为PHP: null

UPDATE

解释我的目标: 我有被阻止在中国WP站点。我有几个服务,我认为这是问题,包括:

  • 谷歌Analytics(分析)
  • 谷歌验证码
  • 谷歌地图
  • 谷歌字体
  • Vimeo的

我想检测的国家代码然后如果它的瓷器然后不显示脚本/ CSS在PHP服务器端。

谢谢,

+2

什么的'的file_get_contents结果( “http://ipinfo.io/{$ip}”)'可能不是你期待什么(即它可能是HTML) –

+0

我刚才echo $ details和输出是'PHP:{“ip”:“192.xxx.xx.x”,“bogon”:true}' – roshambo

+0

似乎你应该使用'file_get_contents(“ http://ipinfo.io/$ip/json“)'如果你想要JSON响应 - 甚至不知道那些'{}'用于 –

回答

-1

您需要从URL中删除大括号。

$details = json_decode(file_get_contents("http://ipinfo.io/$ip")); 
+0

否与大括号的问题。 –

0

那你试图做的jQuery版本如何? 在我看来,这比PHP版本容易得多。

$.getJSON("https://ipinfo.io/", 
 
    function(data){ 
 
     
 
     // show all options from data object 
 
     //console.log(data); 
 
     
 
     var country = data.country; 
 
     var city = data.city; 
 
     var loc = data.loc; 
 
     var ip = data.ip 
 
     
 
     var details = "<h1>"+ip+"</h1>"+"<br>COUNTRY: "+country+"<br>CITY: "+city+"<br>LOC: "+loc; 
 
     
 
     $("#details").html(details); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<div id="details"></div>

0

没有与你的代码没有问题为止。 (您可以使用硬编码IP地址(例如8.8.8.8)进行检查)

您正在localhost中测试您的代码,因此$_SERVER['REMOTE_ADDR']返回本地IP地址而不是公用IP。

该网站ipinfo.io将无法​​使用本地IP地址,所以它会回应像{"ip":"192.xxx.xx.x","bogon":true}。因此在响应中没有名为country的属性,这意味着null

如果您将代码部署到“真实”服务器(具有公共IP地址),那么它将起作用。

0

使用ipinfo.io官方PHP客户端库:https://github.com/DavidePastore/ipinfo

<?php 
    // Initialize ipinfo 
    $ipInfo = new DavidePastore\Ipinfo\Ipinfo(array(
     "token" => "your_api_key" 
    )); 

    $ip = $_SERVER['REMOTE_ADDR']; 

    //Get all the properties 
    $host = $ipInfo->getFullIpDetails($ip); 

    // Output Country to JavaScript Console 
    echo("<script>console.log('PHP: ".$host->getCountry()."');</script>"); 
?>