Intereting Posts
Может ли кто-нибудь дать мне пример для класса CURLFile для PHP? Каковы накладные расходы на использование PHP int? незаконно 0000-00-00 00:00:00 timestamp отправляется php в mysql с использованием codeigniter Использование MySQL с PHP на Heroku PHP glob () для отображения файла, который не начинается с подчеркивания? Каковы преимущества использования отношения «один к одному»? (Баз данных) Как получить одно значение из результата запроса в php Symfony2 за ELB перенаправляет на http вместо https как включить HTTPS для всего сайта drupal 6? Переходы строк заголовка PHP и HTTP: какой символ используется для представления? Включить ничего не делает получить скрытое значение входного тега как строку, используя PHP простой HTML DOM Подготовленный отчет PDO – синтаксис и дезинфекция Самый простой вопрос: извлекать значения из массива Как преобразовать шестнадцатеричную строку UTF-16 в UTF-8 в PHP?

PHP $ _SERVER показывает IPv6

Я столкнулся с проблемой с $ _SERVER ['REMOTE_ADDR'] в PHP. Он дает значение IPv6, даже если сервер использует IPv4.

Может ли кто-нибудь помочь мне решить эту проблему.

Related of "PHP $ _SERVER показывает IPv6"

Затем сервер принимает соединения на сокет IPv6. Некоторые операционные системы могут выполнять как IPv4, так и IPv6 в гнезде IPv6. Когда это произойдет, адрес IPv6 будет выглядеть так ::ffff:c000:027b или ::ffff:c000:027b который является тем же адресом, но написанным в шестнадцатеричном формате.

Если вы видите адреса IPv6, такие как 2a00:8640:1::224:36ff:feef:1d89 то ваш веб-сервер действительно доступен по IPv6 🙂

В любом случае, чтобы преобразовать все в каноническую форму, вы можете использовать что-то вроде:

 // Known prefix $v4mapped_prefix_hex = '00000000000000000000ffff'; $v4mapped_prefix_bin = pack("H*", $v4mapped_prefix_hex); // Or more readable when using PHP >= 5.4 # $v4mapped_prefix_bin = hex2bin($v4mapped_prefix_hex); // Parse $addr = $_SERVER['REMOTE_ADDR']; $addr_bin = inet_pton($addr); if( $addr_bin === FALSE ) { // Unparsable? How did they connect?!? die('Invalid IP address'); } // Check prefix if( substr($addr_bin, 0, strlen($v4mapped_prefix_bin)) == $v4mapped_prefix_bin) { // Strip prefix $addr_bin = substr($addr_bin, strlen($v4mapped_prefix_bin)); } // Convert back to printable address in canonical form $addr = inet_ntop($addr_bin); 

Используя этот код, при вводе одного из следующих значений:

 ::ffff:192.000.002.123 ::ffff:192.0.2.123 0000:0000:0000:0000:0000:ffff:c000:027b ::ffff:c000:027b ::ffff:c000:27b 192.000.002.123 192.0.2.123 

вы всегда получаете канонический IPv4-адрес 192.0.2.123 качестве вывода.

И, конечно, адреса IPv6 возвращаются как канонические адреса IPv6: 2a00:8640:0001:0000:0224:36ff:feef:1d89 становится 2a00:8640:1::224:36ff:feef:1d89 и т. Д.