2010-09-13 9 views
33

Ho bisogno di recuperare l'IP di un utente. Il mio localhost sta restituendo ::1 come l'IP. Sono curioso, se questo è un comportamento previsto? Sto gestendo MAMP su Snow Leopard.Un MAMP dovrebbe restituire :: 1 come IP su localhost?

+0

possibile duplicato di [PHP $ _SERVER \ ['REMOTE_HOST' \] restituisce :: 1] (http://stackoverflow.com/questions/2482033/php-serverremote-host-returns-1) –

risposta

37

Stessa domanda, e trovata una soluzione valida, testata, funziona bene. Volevo avere l'ip addy - di 127.0.0.1 invece di dover accettare il :: 1 e discutere l'intero IPv4/6 problemi. Così, ho trollata per qualche istante e sono caduto su un commento 2008 realizzato da @Brad - qui: http://board.issociate.de/thread/489575/SERVERquotREMOTEADDRquot-returning-1.html

Riassumendo - (su Mac OS - Mountain Lion in particolare)

sudo vi /etc/apache2/httpd.conf

trovare dove Apache è 'listen'-zione ai IPS/porti, ecc ... in genere questo sarà una linea simile a questo

Listen 80

Far sembrare come questo:

Listen 127.0.0.1:80

salvarlo nuovamente. Riavvia Apache. Voilà!

Ora $_SERVER[REMOTE_ADDR] sarà simile a questo 127.0.0.1.

Spero che aiuti qualcuno.

+1

"Ascolta 127.0.0.1:80" intendi :) –

+1

Buona cattura, corretta, grazie @Ivo :). –

+3

In questo modo si disabilita il supporto IPv6 per Apache. Puoi aggiustarlo in un altro modo: aggiungi '' 127.0.0.1 localhost'' al file hosts, quindi la risoluzione IPv4 è priorizzata su IPv6 per localhost;) –

31

::1 è l'equivalente IPv6 dell'indirizzo IPv4 127.0.0.1.

È possibile convertire l'indirizzo IPv6 in indirizzo IPv4 utilizzando la funzione inet_ntop() come Adam.

http://php.net/manual/en/function.inet-ntop.php

+1

Credo che tu possa convertire tra IPv4 e IPv6 usando 'inet_ntop' –

+0

@adam, sì, hai ragione. @Mild: se sei soddisfatto della mia risposta, accetta;] –

+1

$ ip = inet_ntop ($ _ SERVER ['REMOTE_ADDR']); sta tornando Attenzione: inet_ntop() [function.inet-ntop]: valore in_addr non valido in /Applications/MAMP/htdocs/createstudios/wp-content/themes/createstudios/page.php sulla riga 18 –

0

si deve disattivare il supporto IPv6 nel vostro sistema operativo per Apache per interrompere la visualizzazione di questi indirizzi in formato IPv6, quando si desidera che il formato IPv4. Ho disabilitato il supporto IPv6 e il suo funzionamento come previsto ora.

Recentemente mi sono imbattuto in questo problema, anche se non ricordo di aver mai abilitato il supporto per ipv6 sul mio sistema Windows 7, potrebbe essere fatto da Microsoft in uno dei loro aggiornamenti (forse).

+0

Credo che IPv6 sia stato abilitato di default da Windows XP SP2 o anche prima. –

2

per chi non ha reslove questo problema sembra che il file hosts è mancante o la linea

127.0.0.1  localhost 

in etc\hosts LINUX

in /private/etc/hosts dispositivi Mac

in \%WINDIR%\system32\drivers\etc\hosts Windows XP/Vista/7/8/

whene il file hosts rimosso o missed o la linea troppo la IPV6 sarà fissata dal default ...

4

modificando il /etc/apache2/httpd.conf o addirittura /private/etc/hosts non è la soluzione.Restituisce: 1 perché è l'equivalente IPv6 del vecchio (ma oro) IPv4 127.0.0.1. Come è definito nel /privates/etc/hosts, ogni volta che si accede a http://localhost assume IPv6 :: 1. Quindi è il comportamento previsto.

Una soluzione alternativa sarebbe accedere direttamente a http://127.0.0.1. Funzionerà bene. Ma ricorda che la disponibilità di IPv6 sta aumentando. Potresti assicurarti che il tuo server (dopo la distribuzione) risponda solo a IPv4 ma a medio termine, se il tuo sito/web app non gestisce correttamente IPv4 e IPv6, c'è una grande possibilità che qualcosa vada storto entro 1/2 anni. O prima, non lo sappiamo mai.

Problemi correlati