Storing an IP as an unsigned int?
I read that the best way to store IP addresses in a database is to make an Unsigned Int(10) field. How do I convert the IP addresses using PHP? I've tried using
$this->ip = long2ip($_SE开发者_开发知识库RVER['REMOTE_ADDR']);
But this doesn't seem to work. I found the way to convert it back to an IP address using
$this->ip = sprintf("%u", ip2long($result['ip']));
How do I convert the IP Address initially? Should I be using PHP for this? Or would it be better to integrate into the MySQL query?
long2ip
converts an integer into the IP format and ip2long
does the inverse.
So use ip2long
to convert $_SERVER['REMOTE_ADDR']
into an integer for storing it in the database and use long2ip
after reading the integer from the database:
$long = ip2long($_SERVER['REMOTE_ADDR']);
$ip = long2ip($long);
Better put this logic in your SQL query:
INSERT INTO `table`
(`ip`)
VALUES
INET_ATON('192.168.0.1')
And then covert address back when selecting data:
SELECT INET_NTOA(`ip`)
FROM `table`
I used this
function ip2int($ip) {
$a = explode(".",$ip);
return $a[0] * 256 * 256 * 256 + $a[1] * 256 * 256 + $a[2] * 256 + $a[3];
}
If you're using MySQL you can use the INET_ATON
(ip2long equivalent) and INET_NTOA
(long2ip) functions rather than doing the processing with PHP:
You’ll want to convert the dotted string version of your IP using ip2long
, and back using long2ip
. Looks like you have it backwards right now.
$integer_ip = ip2long($_SERVER["REMOTE_ADDR"]); // => 1113982819
$dotted_ip = long2ip($integer_ip); // => "66.102.7.99"
精彩评论