Если вы используете Nginx, вы также можете просто исправить это на уровне веб-сервера еще до того, как PHP подключится, и тогда $ip = getenv(REMOTE_ADDR);
даст вам «реальный» IP-адрес посетителя. В nginx вы должны занести в белый список IP-адреса Cloudflare в файле nginx.conf, используя set_real_ip_from XXX
для каждого из диапазонов IP-адресов Cloudflare.
Без исправления уровня веб-сервера я использовал:
if ($ip=='') $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
Когда я исправил проблему регистрации IP на уровне веб-сервера, я использовал:
if ($ip=='') $ip = $_SERVER['REMOTE_ADDR'];