2017-09-27 125 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>"); 
?>