W3docs

Функция PHP ip2long(): всё, что нужно знать

Как PHP-разработчику вам может понадобиться преобразовать IP-адрес из читаемого формата в длинное целое число. Функция ip2long() — встроенная функция PHP для этого.

Как PHP-разработчику вам может понадобиться преобразовать IP-адрес из читаемого формата в длинное целое число. Функция ip2long() — встроенная функция PHP, выполняющая это преобразование. В данной статье рассматриваются её синтаксис, использование и важные особенности.

Что такое функция ip2long()?

Функция ip2long() преобразует стандартный адрес IPv4 в виде строки (запись с точками, например 192.168.0.1) в соответствующее 32-битное целое число.

Адрес IPv4 — это по сути четыре байта. ip2long() упаковывает эти четыре байта в одно число: первый октет становится старшим байтом, последний — младшим. Таким образом, 127.0.0.1 преобразуется в 127 × 256³ + 0 × 256² + 0 × 256 + 1 = 2130706433.

Зачем преобразовывать IP в целое число?

Хранение IP-адресов в виде целых чисел вместо строк имеет реальные преимущества:

  • Меньший объём хранения: столбец INT UNSIGNED занимает 4 байта против до 15 символов в строковом формате.
  • Более быстрые сравнения и запросы по диапазону: проверка того, попадает ли IP в диапазон CIDR, сводится к простой целочисленной арифметике (WHERE ip BETWEEN :start AND :end).
  • Индексирование: целочисленные индексы компактнее и быстрее строковых.

Если вам нужно только отображать адрес, оставьте его строкой. Целочисленный формат оправдывает себя при хранении, сортировке или поиске по диапазону для множества адресов.

Как использовать функцию ip2long()

Использование функции ip2long() очень простое. Вот её синтаксис:

Синтаксис PHP функции ip2long()

ip2long($ip_address);

Функция принимает один параметр:

  • $ip_address: IP-адрес, который нужно преобразовать в длинное целое число.

Вот пример использования функции ip2long() с надлежащей проверкой и беззнаковым форматированием:

Как использовать функцию ip2long()?

php— editable, runs on the server

В этом примере мы преобразуем IP-адрес "127.0.0.1" в длинное целое число. Мы проверяем, равен ли результат false (что указывает на некорректный ввод), и используем sprintf('%u', ...) для вывода значения как беззнакового целого числа.

Обратное преобразование: ip2long() и long2ip()

У функции ip2long() есть зеркальная функция, long2ip(), которая преобразует целое число обратно в строку с точками. Вместе они образуют полный цикл преобразования:

<?php

$ip = "192.168.1.1";

$int = ip2long($ip);              // signed 32-bit value
$stored = sprintf('%u', $int);    // unsigned string for storage: 3232235777

echo $stored . "\n";              // 3232235777
echo long2ip($int) . "\n";        // 192.168.1.1

Обратите внимание, что long2ip() принимает знаковое значение, возвращаемое ip2long(), напрямую, поэтому не нужно конвертировать беззнаковую форму обратно перед её вызовом.

Важные замечания

  • Беззнаковый вывод: ip2long() возвращает знаковое 32-битное целое число. Для IP-адресов из верхнего диапазона (например, 192.168.1.1) может возвращаться отрицательное число. Всегда используйте sprintf('%u', ip2long($ip)) при хранении или отображении результата.
  • Поддержка IPv6: ip2long() поддерживает только адреса IPv4. Для IPv6 используйте функцию inet_pton().

Заключение

Функция ip2long() предоставляет простой способ преобразования адресов IPv4 в целые числа для хранения или сравнения. Не забывайте проверять возвращаемое значение и использовать sprintf('%u', ...) для стабильного беззнакового вывода. Надеемся, что это руководство поможет вам эффективно реализовать преобразование IP-адресов в ваших PHP-приложениях.

Практика

Практика
Что делает функция PHP 'ip2long'?
Что делает функция PHP 'ip2long'?
Was this page helpful?