Perché getenv ('REMOTE_ADDR') mi dà un indirizzo IP vuoto?
-
05-07-2019 - |
Domanda
Questo codice PHP ...
207 if (getenv(HTTP_X_FORWARDED_FOR)) {
208 $ip = getenv('HTTP_X_FORWARD_FOR');
209 $host = gethostbyaddr($ip);
210 } else {
211 $ip = getenv('REMOTE_ADDR');
212 $host = gethostbyaddr($ip);
213 }
Genera questo avviso ...
Avviso: gethostbyaddr () [function.gethostbyaddr]: l'indirizzo è non in formato a.b.c.d in C: \ inetpub ... \ nomefile in linea 212
Sembra che $ ip sia vuoto.
Soluzione
su php.net dice quanto segue:
La funzione
getenv
non funziona se l'API del server è ASAPI (IIS). Quindi, prova a non usaregetenv ('REMOTE_ADDR')
, ma$ _SERVER [" REMOTE_ADDR "]
.
Forse hai provato a farlo con $ _SERVER
?
Altri suggerimenti
Perché non usi
Perché non usi
Perché non usi
Perché non usi
<*>
e
<*>SERVER['REMOTE_ADDR']
e
<*>SERVER['HTTP_X_FORWARDED_FOR']
e
<*>SERVER['REMOTE_ADDR']
e
<*>È già stata fornita una soluzione migliore. Ma comunque:
getenv('HTTP_X_FORWARD_FOR');
dovrebbe essere
getenv('HTTP_X_FORWARDED_FOR');
Sì ... a volte i computer vogliono avere stringhe che capiscono ;-)
Prima di tutto, getenv () accetta una stringa come parametro. Alla linea 207, dovresti usare:
getenv('HTTP_X_FORWARDED_FOR')
... anziché:
getenv(HTTP_X_FORWARDED_FOR)
In secondo luogo, l'accesso a queste variabili tramite $ _SERVER è una soluzione più affidabile, in quanto getenv () tende a mostrare comportamenti diversi su piattaforme diverse.
Inoltre, queste variabili probabilmente non funzioneranno se si esegue questo script tramite CLI.
Prova a var_dump ($ ip); e vedi cosa contiene la variabile.