Ciao,
Vorrei segnalare agli admin di altervista.org che risulta del tutto impossibile estrarre dei dati da un file JSON di questo sito http://ipinfo.io/developers che rende disponibile appunto il JSON, per ricavare da un IP varie info.
Ho sviluppato una classe PHP, che in locale (con Xampp, per capirci) funziona perfettamente. Il problema è quando la metto online, in Production qui sul mio sito, che NON funziona. A video, non vedo errori neanche istanziando la classe ed accedendo ad uno dei metodi con var_dump(). Ottengo solo un bel NULL!!! E ci metto pure :
error_reporting(E_ALL);
Sottolineo, come ho sbloccato da parecchio le connessioni Server to Server, ed infatti ad es. questa mia pagina usa un'altra API, resa disponibile da un altro sito per estrarre i dati da un altro JSON file sempre tramite cURL, e funziona perfettamente:
http://newbielinux.altervista.org/geocoding.php
Pertanto vorrei chiedere agli admin di altervista.org se per caso invece il sito che ho citato all'inizio, non viene da loro bloccato in qualche modo?
Avevo infatti in precedenza provato a recuperare il JSON dal sito, usando file_get_contents() ovvero così:
Codice PHP:
function ip_details($ip)
{
$json = file_get_contents("http://ipinfo.io/{$ip}");
$details = json_decode($json);
return $details;
}
$details = ip_details('8.8.8.8');
echo $details->ip . '<br />';
echo $details->city . '<br />';
echo $details->region . '<br />';
echo $details->country . '<br />';
echo $details->loc . '<br />';
echo $details->hostname . '<br />';
echo $details->org . '<br />';
echo $details->postal . '<br />';
che in locale, manco a dirlo, funziona perfettamente!.
Allora mi sono creato una classe ricorrendo alle cURL, ma anche qui, ripeto NON ottengo nulla.
Ecco la mia classe:
Codice PHP:
class Geolocalize
{
public $host = 'http://ipinfo.io/{IP}';
public $ip;
public $city;
public $region;
public $country;
public $loc;
public $hostname;
public $org;
public $postal;
public function __construct($ip)
{
$host = str_replace('{IP}', $ip, $this->host);
$response = $this->fetch($host);
// decode the JSON into an associative array, setting the option true
$data = json_decode($response, true);
//set the vars
$this->ip = $data['ip'];
$this->city = $data['city'];
$this->region = $data['region'];
$this->country= $data['country'];
$this->loc = $data['loc'];
$this->hostname = $data['hostname'];
$this->org = $data['org'];
$this->postal = $data['postal'];
}
public function fetch($host)
{
if ( function_exists('curl_init') )
{
// use cURL to fetch data
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host);
// if deactivated (with 0) you see the json from the API
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close ($ch);
}
else if ( ini_get('allow_url_fopen') )
{
//fall back to fopen()
$response = file_get_contents($host, 'r');
}
return $response;
}
}
e la uso, poi, in un altro mio file, in questo modo:
Codice PHP:
error_reporting(E_ALL);
require_once 'geo.class.php';
$geo = new Geolocalize('74.125.71.138');
echo var_dump($geo->ip) . '<br />';
echo $geo->city . '<br />';
echo $geo->region . '<br />';
echo $geo->country . '<br />';
echo $geo->loc . '<br />';
echo $geo->hostname . '<br />';
echo $geo->org . '<br />';
echo $geo->postal . '<br />';
Se qualche admin mi potesse aiutare, nel capire perché il sito http://ipinfo.io/developers risulta del tutto inutilizzabile (il loro JSON, intendo) mi farebbe davvero un gran favore.
Non vedo assolutamente, ripeto, errori nel codice qui inserito....perciò non saprei davvero.
Grazie e ciao.