A wrapper around the ipinfo.io services.
You can install the library using composer:
$ composer require davidepastore/ipinfo
You can set your token when you instantiate the object but it's not mandatory.
$ipInfo = new DavidePastore\Ipinfo\Ipinfo(array(
"token" => "your_api_key"
));
The cURL options to use while trying to connect when you instantiate the object:
$ipInfo = new DavidePastore\Ipinfo\Ipinfo(array(
"curlOptions" => array(
CURLOPT_CONNECTTIMEOUT => 1,
CURLOPT_TIMEOUT => 2,
CURLOPT_CAINFO => __DIR__ . "/cacert.pem"
)
));
You can read all the properties from the given ip.
//Get all the properties
$host = $ipInfo->getFullIpDetails("8.8.8.8");
//Get only a single property (this could save bandwidth)
$city = $ipInfo->getSpecificField("8.8.8.8", DavidePastore\Ipinfo\Ipinfo::CITY);
You can read all the properties from your ip.
//Get all the properties
$host = $ipInfo->getYourOwnIpDetails();
//Get only a single property (this could save bandwidth)
$city = $ipInfo->getYourOwnIpSpecificField(DavidePastore\Ipinfo\Ipinfo::CITY);
After obtaining the Host
instance you can read all the properties or each of them individually.
//Read all the properties
$city = $host->getCity();
$country = $host->getCountry();
$hostname = $host->getHostname();
$ip = $host->getIp();
$loc = $host->getLoc();
$org = $host->getOrg();
$phone = $host->getPhone();
$postal = $host->getPostal();
$region = $host->getRegion();
//Get the associative array with all the properties
$properties = $host->getProperties();
There are different constants that you could use to read specific field value from an Ipinfo
instance using the getSpecificField()
and getYourOwnIpSpecificField()
methods:
IpInfo::IP; //For the ip address
IpInfo::HOSTNAME; //For the hostname
IpInfo::LOC; //For the loc
IpInfo::ORG; //For the org
IpInfo::CITY; //For the city
IpInfo::REGION; //For the region
IpInfo::COUNTRY; //For the country
IpInfo::PHONE; //For the phone
IpInfo::POSTAL; //For the postal
IpInfo::GEO; //For the geo info. See the paragraph below for more info
By using the getIpGeoDetails()
method you will get less fields. This call tends to be faster than getFullIpDetails()
so use this call in case you only need the following fields:
IpInfo::IP; //For the ip address
IpInfo::CITY; //For the city
IpInfo::REGION; //For the region
IpInfo::COUNTRY; //For the country
IpInfo::PHONE; //For the phone
IpInfo::POSTAL; //For the postal
These fields will be empty:
IpInfo::HOSTNAME; //For the hostname
IpInfo::LOC; //For the loc
IpInfo::ORG; //For the org
You can handle all the types of IpInfo exceptions by catching the IpInfoExceptionException
:
use DavidePastore\Ipinfo\Exception\IpInfoExceptionException;
try {
$host = $ipInfo->getFullIpDetails("8.8.8.8");
} catch (IpInfoExceptionException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
It could happen that the token you are using to make the API call is not valid. You can handle it by catching the InvalidTokenException
:
use DavidePastore\Ipinfo\Exception\InvalidTokenException;
try {
$host = $ipInfo->getFullIpDetails("8.8.8.8");
} catch (InvalidTokenException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
It could happen that your API call exceeds the rate limit. You can handle it by catching the RateLimitExceedException
:
use DavidePastore\Ipinfo\Exception\RateLimitExceedException;
try {
$host = $ipInfo->getFullIpDetails("8.8.8.8");
} catch (RateLimitExceedException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
It could happen that your API call is trying to obtain info about a wrong ip. You can handle it by catching the WrongIpException
:
use DavidePastore\Ipinfo\Exception\WrongIpException;
try {
$host = $ipInfo->getFullIpDetails("qwerty");
} catch (WrongIpException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
If you have issues, just open one here.