A basic PHP wrapper for adding IP based user location detection into your application using the IP Info DB API.
A basic PHP wrapper for adding IP based user location detection into your application using the IP Info DB API., (*1)
Add pta/ipinfo
as a requirement to composer.json
:, (*2)
{ "require": { "pta/ipinfo": "0.1.*" } }
Update your packages with composer update
or install with composer install
., (*3)
You can also add the package using composer require pta/ipinfo
and later specifying the version you want., (*4)
You can use ->getCity($ip)
to retrieve city level information about an IP address., (*5)
Example json response:, (*6)
{ "statusCode" : "OK", "statusMessage" : "", "ipAddress" : "81.149.15.65", "countryCode" : "GB", "countryName" : "UNITED KINGDOM", "regionName" : "ENGLAND", "cityName" : "SALISBURY", "zipCode" : "SP1 1TP", "latitude" : "51.0693", "longitude" : "-1.79569", "timeZone" : "+01:00" }
You can use ->getCountry($ip)
to retrieve country level information about an IP address. Obviously this is faster than retrieving city level information., (*7)
Example json response:, (*8)
{ "statusCode" : "OK", "statusMessage" : "", "ipAddress" : "81.149.15.65", "countryCode" : "GB", "countryName" : "UNITED KINGDOM" }
You can use ->validIP($ip)
to see if the specified IP Address is valid., (*9)
Under the hood this uses filter_var($ip, FILTER_VALIDATE_IP)
, I assume this is pretty solid. If you have any suggestions for a better way of doing this send a pull request or drop me an email., (*10)
You can use ->getIpAddress()
to retrieve the users IP address., (*11)
You shouldn't be trusting a user based this data, HTTP headers can be faked, trivially., (*12)
You can get a (free) API key here, obviously this should be kept private., (*13)
While there are no strict query limits if you send more than 2 requests per second they will be queued. You will still always get a response, but it will be slowed to around 1 /second., (*14)
I would strongly suggest using some form of cache. Cookies (mmm cookies) are probably the easiest way to deal with this:, (*15)
// Create a new instance $ipInfo = new ipInfo (APIKEY, 'json'); // Grab the user location info $location = json_decode($ipInfo->getCountry($userIP)); // Create a cookie holding the country code for 1 hour (3600 seconds) setcookie('location', $location['countryCode'], time() + 3600);
->getIpAddress()
function probably needs additional testing
This is open-sourced software licensed under the MIT license., (*16)