I need to retrieve a user's IP. My localhost is returning ::1
as the IP. I am curious, if this is an expected behaviour? I'm running MAMP on Snow Leopard.
-
possible duplicate of [PHP $_SERVER\['REMOTE_HOST'\] returns ::1](http://stackoverflow.com/questions/2482033/php-serverremote-host-returns-1) – Pekka Sep 13 '10 at 10:17
5 Answers
Same question, and found a valid solution, tested, works well. I wanted to have the ip addy - of 127.0.0.1 as well instead of having to accept the the ::1 and debate the whole IPv4/6 issues. So, i trolled for a few moments and fell onto a 2008 comment made by @Brad - here: http://board.issociate.de/thread/489575/SERVERquotREMOTEADDRquot-returning-1.html
Summarizing - (on Mac OS - Mountain Lion in particular)
sudo vi /etc/apache2/httpd.conf
Find where your apache is 'listen'-ing to the ips/ports, etc... Typically this will be a line looking like this
Listen 80
Make it look like this:
Listen 127.0.0.1:80
Resave it. Restart Apache. Voila!
Now $_SERVER[REMOTE_ADDR]
will look like this 127.0.0.1
.
Hope it helps someone.

- 837
- 8
- 12
-
1
-
3This way you are disabling IPv6 support for Apache. You can fix it another way: add ``127.0.0.1 localhost`` to hosts file, so IPv4 resolution is priorized over IPv6 for localhost ;) – Áxel Costas Pena Dec 04 '13 at 01:52
-
-
@ÁxelCostasPena I've got that on the first line of hosts, still get ::1 in PHP. – Design by Adrian Aug 26 '16 at 14:49
-
::1
is the IPv6 equivalent of IPv4 127.0.0.1
address.
You can convert IPv6 address to IPv4 address using function inet_ntop()
as Adam, said.

- 10,472
- 6
- 52
- 68
-
1I believe you can convert between IPv4 and IPv6 using `inet_ntop` – Adam Hopkinson Sep 13 '10 at 10:19
-
@adam, yes, you are right. @Mild: if you are satisfied with my answer, please accept ;] – Tomasz Kowalczyk Sep 13 '10 at 10:21
-
1$ip=inet_ntop($_SERVER['REMOTE_ADDR']); is returning Warning: inet_ntop() [function.inet-ntop]: Invalid in_addr value in /Applications/MAMP/htdocs/createstudios/wp-content/themes/createstudios/page.php on line 18 – Mild Fuzz Sep 13 '10 at 10:26
-
-
-
I don;t know if unprepared IPv6 string can be input for inet_ntop(). There is some preparing going down in manual - see comments, maybe they will enlighten you a bit. – Tomasz Kowalczyk Sep 13 '10 at 10:57
Modifying the /etc/apache2/httpd.conf
or even /private/etc/hosts
isn't the solution. It's returning ::1 because it's the IPv6 equivalent to the old (but gold) IPv4's 127.0.0.1
. As it's defined in the /privates/etc/hosts
, whenever you access http://localhost
it assumes IPv6 ::1. So it's the expected behavior.
A workaround would be to access http://127.0.0.1
directly. It'll work just fine. But remember that IPv6 availability is increasing. You could make sure your server (after deployment) will only respond to IPv4 but in the mid term, if your site/web app does not handle both IPv4 and IPv6 properly, there's a great chance something will go wrong within 1/2 years. Or sooner, we never know.

- 111
- 1
- 3
for who has not reslove this issue it sounds that the hosts
file is missing or the line
127.0.0.1 localhost
in etc\hosts
LINUX
in /private/etc/hosts
MAC devices
in \%WINDIR%\system32\drivers\etc\hosts
WINDOWS xp/vista/7/8/
whene the file hosts
is removed or missed
or the line too the IPV6
will be set by default
...

- 1,111
- 11
- 30
You have to disable IPv6 support in your OS for apache to stop showing these IPv6 format addresses, when you want the IPv4 format. I disabled IPv6 support and its working as expected now.
I recently ran into this issue, though i don't ever remember enabling ipv6 support on my Windows 7 system, could be done by Microsoft in one of their updates (maybe).

- 2,770
- 3
- 31
- 39
-
I believe that IPv6 has been enabled by default since Windows XP SP2 or even earlier. – rink.attendant.6 Jul 09 '13 at 20:58