IPv4 adressen opslaan in MySQL met PHP

Inleiding: ipv4 adressen en mysql

Deze pagina behandelt het opslaan van IPv4 adressen in een MySQL database. Een veelvoorkomende, maar inefficiënte, methode is het gebruik van een VARCHAR veld. Dit vereist vaak een VARCHAR(15) of zelfs VARCHAR(100), wat onnodig veel ruimte inneemt. Een veel betere oplossing is het gebruik van een UNSIGNED INT(4) veld. Dit vereist wel een omzetting van het IP adres, maar zowel PHP als MySQL bieden functies voor deze conversie.

Het creëren van de tabel

Om de tabel te maken, kun je de volgende SQL query gebruiken: CREATE TABLE IF NOT EXISTS ips ( id int(10) unsigned NOT NULL AUTO_INCREMENT, ip int(4) unsigned NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Dit creëert een tabel genaamd ips met een automatisch incrementerende id en een ip veld van het type UNSIGNED INT(4). De tabel wordt ook ingesteld met InnoDB engine en UTF-8 character set.

Het invoegen van ipv4 adressen

Om een IPv4 adres in de database in te voegen, kun je de INET_ATON() functie gebruiken. Bijvoorbeeld, om het adres 127.0.0.1 in te voegen, gebruik je de volgende query: INSERT INTO ips (ip) VALUES(INET_ATON('127.0.0.1')). Dit resulteert in een waarde van 2130706433 in het ip veld, wat de numerieke representatie is van het IP adres.

Conversie met php: ip2long() en long2ip()

PHP biedt de functies ip2long() en long2ip() voor het converteren tussen IPv4 adressen en hun numerieke representatie. Bijvoorbeeld: $ip="127.0.0.1"; $encoded = ip2long($ip); echo $encoded; // toont 2130706433 $ip_2 = long2ip($encoded); echo $ip_2; // toont 127.0.0.1 Deze functies maken het eenvoudig om IPv4 adressen in PHP te manipuleren en op te slaan in de database.

Voordelen van unsigned int(4)

Het opslaan van IPv4 adressen als UNSIGNED INT(4) biedt aanzienlijke voordelen ten opzichte van VARCHAR. Het is efficiënter in termen van opslagruimte en maakt snellere queries mogelijk. Bovendien biedt het de mogelijkheid om geavanceerde zoekopdrachten uit te voeren, zoals het vinden van alle IP adressen binnen een bepaald bereik, of het controleren of een adres tot een specifieke subnet hoort. Dit is lastiger met VARCHAR.

Dynamische variabele namen in php

Een interessant PHP trucje is het gebruiken van dynamische variabele namen. Als de naam van een variabele niet bekend is tot runtime, kun je de volgende syntax gebruiken: $name="nieznana_nazwa"; echo ${$name}; Dit is equivalent aan echo $nieznana_nazwa;. Hoewel er waarschijnlijk andere manieren zijn om dit te bereiken, zoals het gebruik van arrays, is deze techniek handig om te onthouden.