Salve a tutti è il primo post che creo, quindi scusate l'imprecisione...
Piccola classe per gestire la provenienza di un determinato indirizzo IP (più o meno diciamo)...
Questa ha lo scopo di effettuare dei filtri in base alle proprietà passate al costruttore, restituendo un bool...
Naturalmente per utilizzarla nel caso più banale è possibile inizializzarla in questo modo....
Piccola classe per gestire la provenienza di un determinato indirizzo IP (più o meno diciamo)...
Questa ha lo scopo di effettuare dei filtri in base alle proprietà passate al costruttore, restituendo un bool...
PHP:
<?php
/**
* Created by PhpS.
* User: Marco Arena Di R.
* Date: 23/02/2018
* Time: 08:05
* Class Geocode
* Ha lo scopo di fornire uno strato di comunicazione con un servizio gratuito per ottenere informazioni inierenti
* l'indirizzi IP del visitatore dell'aaplicazione sul quale viene installato
* @author Marco Arena Di R.
* @license GPL
* @copyright 2018 Madi-Solution
* @version 1.0.0
*/
class Geocode{
/**
* Indirizzo Servizio Esterno
* @var string
*/
private $service='http://freegeoip.net/json/';
/**
* Indirizzo IP Client
* @var string
*/
private $ip_request='0.0.0.0';
/**
* Risposta
* @var array
*/
private $response=[];
/**
* Codice stati abilitati a visualizzare il contenuto X
* @var array
*/
private $filter=['IT'];
/**
* Attiva il filtro sul campo stato enable, può essere modificato con uno dei parametri
* "ip","country_code","country_name","region_code","region_name","city","zip_code","time_zone","latitude","longitude","metro_code"
* @var string
*/
private $property_filter='state_enable';
/**
* Proprietà per applicare il filtro di visualizzazione
* @var bool
*/
public $view=FALSE;
/**
* Geocode constructor.
* @param array $property Array associativo con chiavi i nomi delle proprietà della classe. Se vuoto utilizza i parametri di default.
*/
public function __construct($property=[])
{
$this->ip_request=$_SERVER['REMOTE_ADDR'];
if(!empty($property)){
foreach ($property as $k=>$v){
$this->$k=$v;
}
}
}
/**
* Inizializza la richiesta solo se è stato valorizzato correttamente l'indirizzo ip del visitatore,
* nel caso contrario i valori presenti saranno tutti null...
* @see $this->model_response();
* @return $this
*/
public function init_(){
if($this->ip_request!='0.0.0.0')$this->response=json_decode(file_get_contents($this->service.$this->ip_request));
$this->model_response();
return $this;
}
/**
* Effettua il filtro su country_code, è possibile modificare il country code con qualsiasi proprierà dell'oggetto risposta
* @return $this
*/
public function check_permision(){
if(empty($this->filter)){
if(property_exists($this->response,$this->property_filter)){
if($this->response->$this->property_filter!=NULL && in_array($this->response->$this->property_filter,$this->filter)) $this->view=TRUE;
else $this->view=FALSE;
}
}$this->view=TRUE;
return $this;
}
/**
* Setta correttamente la risposta anche nel caso in cui sia vuota valorizzando tutte le proprierà a NULL
*/
private function model_response(){
$model=['ip','country_code','country_name','regione_code','region_name','city','zip_code','time_cone','latitude','longitude','metro_code'];
if(empty($this->response)){
$this->response=new stdClass();
foreach ($model as $items){
$this->response->$items=NULL;
}
}
}
/**
* Metodo per ottenere il codice della nazione del cliente
* @return mixed
*/
public function get_country(){
return (property_exists($this->response,'country_code') ? $this->response->country_code : '');
}
/**
* Metodo per ottenere il noome della nazione
* @return mixed
*/
public function get_country_name(){
return (property_exists($this->response,'country_name') ? $this->response->country_name : '');
}
/**
* Metodo per avere il codice della regione
* @return mixed
*/
public function get_regione_code(){
return $this->response->region_code;
}
/**
* Metodo per avere il nome della regione
* @return mixed
*/
public function get_region_name(){
return $this->response->region_name;
}
/**
* Metodo per avere in output un valore valido dalla risposta del servizio
* @param string $param Uno dei parametri della risposta "ip", "country_code", "country_name", "region_code", "region_name", "city", "zip_code", "time_zone", "latitude", "longitude", "metro_code"
* @return mixed
*/
public function free_param($param='country_code'){
return $this->response->$param;
}
}
PHP:
$geocode=new Geocode();
if($geocode->init_()->check_permision()->view)echo 'Abilitato';
else echo 'Non abilitato';
/**
* Per ottenere Nome della nazione
*/
$nome_nazione=$geocode->get_country_name();
/**
* Ottiene il codice della Nazione
*/
$codice_nazione=$geocode->get_country();
/**
* Ottiene il nome della regione
*/
$nome_regione=$geocode->get_region_name();
/**
* Ottiene il codice della Regione
*/
$codice_regione=$geocode->get_regione_code();
/**
* Ottiene il nome della città di appartenenza
*/
$city=$geocode->free_param('city');
/**
* In alternativa può essere usata in questo modo
*/
$geocode=new Geocode();
$codice_regione=$geocode->init_()->get_regione_code();
...etc etc
Ultima modifica: