Я хочу сохранить IP-адреса в своей базе данных, но я также должен использовать их всюду по своему приложению. Я читал об использовании INET_ATON()
и INET_NTOA()
в моих запросах MySQL для вытаскивания 32-разрядного целого числа без знака из IP-адреса, который является точно, что я хочу, поскольку это сделает поиск базы данных быстрее, чем использование символа (15).
Вещь, я не могу найти функцию, которая делает тот же вид вещи в PHP. Единственная вещь, с которой я столкнулся:
http://php.net/manual/en/function.ip2long.php
Таким образом, я протестировал его:
$ip = $_SERVER['REMOTE_ADDR'];
echo ip2long($ip);
И это ничего не производит. В примере, который они дали, это, кажется, работает, но с другой стороны я не абсолютно уверен если ip2long()
делает то же самое как INET_ATON()
.
Кто-то знает функцию PHP, которая сделает это? Или даже абсолютно новое решение хранения IP-адреса в базе данных?
Спасибо.
Для поддержки IPv4 и IPv6. inet_pton ()
и inet_ntop ()
, они доступны с PHP 5.1+ и точно имитируют эквивалентные функции MySQL.
В противном случае просто используйте ip2long ()
и long2ip ()
.
ip2long эквивалентен inet_aton ().
ip2long работает только с IPv4. Я подозреваю, что ваша система использует IPv6 для обратной связи. Попробуйте напечатать REMOTE_ADDR.
Функции ip2long ()
и long2ip ()
должны работать нормально.
Примечание: вы должны использовать их для адресов IPv4 - убедитесь, что в вашем случае $ _ SERVER ['REMOTE_ADDR']
действительно содержит действительный адрес IPv4 (а не какой-то IPv6- прочее) .
Примерка IP-адреса Google:
var_dump(ip2long('209.85.227.147'));
var_dump(long2ip(3512066963));
Я получаю следующий результат:
int(3512066963)
string(14) "209.85.227.147"