INET_ATON () и INET_NTOA () в PHP?

Я хочу сохранить 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-адреса в базе данных?

Спасибо.

32
задан blerh 2 May 2010 в 17:45
поделиться

3 ответа

Для поддержки IPv4 и IPv6. inet_pton () и inet_ntop () , они доступны с PHP 5.1+ и точно имитируют эквивалентные функции MySQL.

В противном случае просто используйте ip2long () и long2ip () .

11
ответ дан 27 November 2019 в 19:56
поделиться

ip2long эквивалентен inet_aton ().

ip2long работает только с IPv4. Я подозреваю, что ваша система использует IPv6 для обратной связи. Попробуйте напечатать REMOTE_ADDR.

1
ответ дан 27 November 2019 в 19:56
поделиться

Функции 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" 
35
ответ дан 27 November 2019 в 19:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: