IP to Country
Auteur: twopeak - 21 november 2004 - 23:48 - Gekeurd door: Dennisvb - Hits: 8163 - Aantal punten: 4.33 (6 stemmen)
Dit scriptje laat je toe te bepalen uit welk land een gebruiker komt.
Run volgende query om de tabel te maken:
CREATE TABLE ip2country (
start_ip varchar(15) NOT NULL default '',
end_ip varchar(15) NOT NULL default '',
start_number int(11) NOT NULL default '0',
end_number int(11) NOT NULL default '0',
countrycode char(2) NOT NULL default '',
country varchar(50) NOT NULL default ''
) TYPE=MyISAM;
Dan moet je die db vullen met de ip's en de landen.
Je kunt dergelijke databases kopen op internet (zoek maar met google "ip2country")
Ik heb een db gevonden die gratis is. Maandelijks kan je op dit adres een nieuw cvs bestand halen met de laatste data! (dit vervangt dan alle vorige data van je db)
www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
(aangezien hij gratis is, is hij ook niet 100% juist of volledig)
Mijn methode om al die info in mijn db te steken is dit:
Je unzipt het bestand, en met je favoriete text-editor en wat search-n-replace creativiteit maak je van elke aparte lijn php + sql commando.
En daarvoor connecteer je naar je database en open je je database.
Dit kun je dan uitvoeren en elke lijn wordt in je tabel gestopt.
Als je nog vlaggetjes van alle landen wilt, kun je naar
sourceforge.net/projects/flags/
surfen en ze daar downloaden.
Roep het script aan met als get variabele $ip = <<je ip adres>>
|
Code: |
<?
$ip_adres = $_GET['ip'];
// -- ip checken ---------------------
if (!ereg ("([0-9]{1,3}\.){3}([0-9]){1,3}", $ip_adres))
{
//eigen foutafhandler
die("IP adres is geen adres!");
}
$conn = @mysql_connect("localhost", "root", "1234");
$db = @mysql_select_db("private") ;
if (!$conn || !$db)
{
//eigen foutafhandeler
die("er was een fout met het openen van de connectie of het selecteren van db<br>");
}
// -- bereken ipnummer -------------------
$ip_arree = explode( ".", $ip_adres );
$ipnr = $ip_arree[0]*16777216 + $ip_arree[1]*65536 + $ip_arree[2]*256 + $ip_arree[3];
// -- ff ipnr checken --------------------
if (!is_numeric($ipnr))
{
//eigen foutafhandeler
die("er was een fout met het opgegeven ip adres!");
}
// -- selecteer landcode -------------------
$queryzin = "SELECT countrycode FROM ip2country WHERE '".$ipnr."' BETWEEN start_number AND end_number";
$landcode_object = mysqlquery($queryzin);
$landcode = mysqlresult( $landcode_object , 0 , "countrycode" );
echo "U komt uit het land met landcode ".$landcode;
echo "<br><img src=\"flags/".strtolower($landcode).".gif\">";
//
//_________________________________________________________________________________________
//gebruik hier best je eigen mysql class. Deze functietjes bootsen het normale na maar geven wat beter fouten terug (imho)
//ze werken op exact dezelfde manier als de "echte" functies, zonder de underscore, dus ze kunnen ook snel weggedaan worden
function mysqlquery($query)
{
$res = @mysql_query($query);
if (!$res)
{
//eigen foutafhandler
die("<h3> er was een <b>fout</b><hr>Fout:<br><br>".mysql_error()."<hr><br> De query was: <br>".$query);
}
return $res;
}
function mysqlresult($object, $rij, $veld)
{
//check of er iets in de queryobject zit op die rij voor die tabel
if (!$aantal_rijen = @mysql_num_rows($object)) // return false?
{
//eigen foutafhandler
die("<h3> er was een fout</h3><br> Er waren geen resultaten bij deze query<br><hr>".mysql_error());
}
if ($aantal_rijen < $rij || $aantal_rijen < 1) //geen resultaten of minder dan wat er opgevraagd zou worden
{
//eigen foutafhandler
die("<h3> er was een fout</h3><br> Er waren minder rijen dan verwacht!");
}
//retourneer het zootje
return mysql_result($object, $rij, $veld);
}
?>
<? $ip_adres = $_GET['ip']; // -- ip checken --------------------- if (!ereg ("([0-9]{1,3}\.){3}([0-9]){1,3}", $ip_adres)) { //eigen foutafhandler die("IP adres is geen adres!"); } if (!$conn || !$db) { //eigen foutafhandeler die("er was een fout met het openen van de connectie of het selecteren van db<br>"); } // -- bereken ipnummer ------------------- $ip_arree = explode( ".", $ip_adres ); $ipnr = $ip_arree[0]*16777216 + $ip_arree[1]*65536 + $ip_arree[2]*256 + $ip_arree[3]; // -- ff ipnr checken -------------------- { //eigen foutafhandeler die("er was een fout met het opgegeven ip adres!"); } // -- selecteer landcode ------------------- $queryzin = "SELECT countrycode FROM ip2country WHERE '".$ipnr."' BETWEEN start_number AND end_number"; $landcode_object = mysqlquery($queryzin); $landcode = mysqlresult( $landcode_object , 0 , "countrycode" ); echo "U komt uit het land met landcode ".$landcode; // //_________________________________________________________________________________________ //gebruik hier best je eigen mysql class. Deze functietjes bootsen het normale na maar geven wat beter fouten terug (imho) //ze werken op exact dezelfde manier als de "echte" functies, zonder de underscore, dus ze kunnen ook snel weggedaan worden function mysqlquery($query) { if (!$res) { //eigen foutafhandler die("<h3> er was een <b>fout</b><hr>Fout:<br><br>".mysql_error()."<hr><br> De query was: <br>".$query); } return $res; } function mysqlresult($object, $rij, $veld) { //check of er iets in de queryobject zit op die rij voor die tabel { //eigen foutafhandler die("<h3> er was een fout</h3><br> Er waren geen resultaten bij deze query<br><hr>".mysql_error()); } if ($aantal_rijen < $rij || $aantal_rijen < 1) //geen resultaten of minder dan wat er opgevraagd zou worden { //eigen foutafhandler die("<h3> er was een fout</h3><br> Er waren minder rijen dan verwacht!"); } //retourneer het zootje } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|