При просмотре возвращаемого значения inet_pton
и параметра inet_ntop
в руководстве по PHP, это относится на in_addr
в обоих случаях.
Быстрый поиск приводит меня к Центр разработки MSDN с этим ответом:
Структура in_addr представляет собой IPv4-адрес в Интернете.
Но это все еще не объясняет, что такое «структура» на самом деле. При тестировании возвращаемых значений с помощью inet_pton
(используя случайный IP-адрес, например 219.225.174.153
), я получаю странные символы, такие как €·Æô
.
Так что же такое «структура» in_addr
, о которой говорят PHP и MSDN?
1 ответ
inet_pton()
превращает удобочитаемый IP-адрес в 4-байтовую двоичную строку, используемую для сетевых операций, обычно с использованием сырых сокетов. Эти «странные символы» представляют собой символы ASCII, представляющие числа 219, 225, 174 и 153, и их порядок байтов может быть или не может быть изменен на обратный, чтобы отразить 'endian-ness' вашей системы.
Каждый IPv4-адрес по сути представляет собой 32-битное целое число без знака, и мы создаем легкое для понимания представление этого числа, разбивая его на 4 отдельных 8-битных числа [от 0 до 255] для того, что называется «четырехзначной нотацией с точками».
Я бы посоветовал посмотреть и / или использовать ip2long()
и < a href = "http://php.net/manual/en/function.ip2long.php" rel = "nofollow noreferrer"> long2ip()
, если вы просто ищете более эффективный хранение данных IP-адресов, а не необработанное сетевое программирование.
ip2long()
и long2ip()
не работают с адресами ipv6, тогда как inet_pton()
и inet_ntop()
могут работать как с адресами ipv4, так и с ipv6, если php был построен с поддержкой ipv6. включено.
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
219
,225
,174
и153
. Помните, что квадраты с точками - это просто удобный для человека (er) метод выражения 32-битного целого числа без знака, которым на самом деле являются адреса IPv4.inet_pton()
, не объясняющей или, по крайней мере, не ссылающейся на ссылку на тип данныхin_addr
. Я видел несколько ответов на SO, в которых говорится, чтоinet_pton()
возвращает двоичную строку, но все еще нет ссылок на источники документации, где это объясняется.