Если у нас есть ip-адрес, как показано ниже:
127.0.0.1
Ли обе функции преобразуют ip-адрес в один номер или отличаются друг от друга и имеют разные результаты?
Они почти точно такие же. ip2long иногда возвращает отрицательное значение, потому что PHP использует подписанные числа для оценки, тогда как MySQL использует unsigned.
Оба они оцениваются как x*(2^24) + y*(2^16) + z*(2^8) + w*(2^0)
, но в PHP из-за долгого подписания будет показано отрицательное значения для определенных IP-адресов.
For signed long, the range is (2^31) - 1 = −2,147,483,648 to +2,147,483,647
Таким образом, адреса при переходе на более чем 2 142 473 647 обернутся и дадут отрицательные значения.
ip2long("254.254.254.254"); // -16843010
Эта ссылка описывает это подробно.
Короче говоря, нет, но эта функция:
function ipv4touint($ipv4){ return sprintf('%u',ip2long($ipv4)); }