Как правильно конвертировать IP в целое число в php? - PullRequest
7 голосов
/ 28 июня 2011

Так что мне нужно хранить IP-адреса в базе данных, но хранить их как укусы не очень эффективно и не очень удобно для моих целей.

Итак ... Как я могу преобразовать ip в целое число в php скак можно меньше обработки, потому что это будет выполняться миллионы раз в день.

И, конечно, как я могу конвертировать обратно из integet в ip?

Я знаю, что это можно найти, и есть некоторыепростые решения - но я прошу самый быстрый способ, а не просто "делай Х и получаешь Y", потому что это на самом деле довольно простая задача.

Ответы [ 3 ]

23 голосов
/ 28 июня 2011

Используйте ip2long() и long2ip().Они самые быстрые из всех, которые вы можете найти в PHP, потому что они просто построены поверх соответствующих функций языка Си.

1 голос
/ 28 июня 2011

Вы можете использовать INT

$ip = ip2long($ip);

Для сохранения в mysql:

$sql = "INSERT INTO user(ip) VALUES('$ip')";
$dbQuery = mysql_query($sql,$dbLink

Вы можете вернуть IP позже:

SELECT INET_NTOA(ip) FROM 'user' WHERE 1

inet_ntoa (выражение):

С учетом числового сетевого адреса IPv4. в порядке байтов в сети, возвращает точечно-четырехугольное представление адрес в виде двоичной строки. INET_NTOA () возвращает NULL, если это так не понимаю его аргумент.

mysql> SELECT INET_NTOA (167773449); -> '10 .0.5.9'

1 голос
/ 28 июня 2011

Используйте ip2long - эта функция настолько быстрая, что просто не имеет значения, если вы вызываете ее миллион раз в день.Это библиотечная функция, поэтому она хорошо протестирована и надежна.

И, учитывая ваше рабочее время, это, безусловно, самое быстрое решение во всей вселенной.

...