2017-12-17 12 views
0

PSを進めるために応答がありませんが:このコードは、Getting visitors country from their IPPHP:試みはJSON文字列

から変更されて、私はhttps://api.ipdata.co/からIPDATAサービスを利用しようとするが、私はJSONをデコードするためにPHPを使用しようとすると、何も起こりませんでした。私がAPIレスポンスを印刷しようとしたときでも。誰もが

PHPコード..笑私を助けることができます:

function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) { 
$output = NULL; 
if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) { 
    $ip = $_SERVER["REMOTE_ADDR"]; 
    if ($deep_detect) { 
     if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)) 
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
     if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) 
      $ip = $_SERVER['HTTP_CLIENT_IP']; 
    } else { 
     echo "error [2]"; 
    } 
} else { 
    echo "error [1]"; 
} 
$rdata = file_get_contents("http://api.ipdata.co/" . $ip); 
echo $rdata; 
$ipdat = @json_decode($rdata); 
echo $ipdat; 
$output = @$ipdat->country_code; 
return $output; 
} 

echo ip_info("Visitor", "country"); 
+1

ちょうど健全性チェックとして、URLにあなたのプロトコルとして代わりに 'http'のhttps''試してみてください:)コメントについて –

+0

感謝を!私はhttpsの代わりにhttpを使用しようとしましたが、うまく動いていないようです...私もURLを印刷しようとしましたが、URLは印刷されましたが、何も... – imgg

+0

これはあなたの実際のコードですか? 'echo ip_info(" Visitor "、" country ");' – miknik

答えて

0

この

function ip_info($ip = NULL, $deep_detect = TRUE) { 
    if ($ip == NULL || !filter_var($ip, FILTER_VALIDATE_IP)) { 
     $ip = $_SERVER["REMOTE_ADDR"]; 
     if ($deep_detect) { 
      if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)){ 
       $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
      } 
      if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)){ 
       $ip = $_SERVER['HTTP_CLIENT_IP']; 
      } 
     } 
    } 

    $ch = curl_init("http://ip-api.com/json/".$ip); 
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    $result = json_decode($result, true); 

    if($result['status'] == "fail"){ 
     $result = FALSE; /* If an Error has come back, you can use $result['message'] to get why. */ 
    } 
    else { $result = $result['countryCode']; } // If Sucess 
    return $result; 
} 
+0

使用していたAPIが遅く、file_get_contentsを使用することはお勧めできません。 –

+0

それは動作します!どうもありがとう! – imgg

+0

問題はありません! APIのURLを確認し、その他の何が得られるかを確認してください。 http://ip-api.com/json/ –

0

を試してみてください私たちは、これを引き起こしてきたかもしれない停電昨日の朝でした。私は次のコードをテストして、それは私のために働く。問題がある場合は教えてください。

function ip_info($ip = NULL, $deep_detect = TRUE) { 
    if ($ip == NULL || !filter_var($ip, FILTER_VALIDATE_IP)) { 
     $ip = $_SERVER["REMOTE_ADDR"]; 
     if ($deep_detect) { 
      if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)){ 
       $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
      } 
      if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)){ 
       $ip = $_SERVER['HTTP_CLIENT_IP']; 
      } 
     } 
    } 

    $ch = curl_init("https://api.ipdata.co/".$ip); 
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    $result = json_decode($result, true); 

    $result = $result['country_code']; 
    return $result; 
} 
var_dump(ip_info('1.1.1.1')); 
//string(2) "AU" 
+1

興味深いところから実行することができます!心配しないで、今私はipdataを使用することができました。返信ありがとう! – imgg