Pourquoi getenv ('REMOTE_ADDR') me donne-t-il une adresse IP vierge?
-
05-07-2019 - |
Question
Ce code 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 }
Lance cet avertissement ...
Avertissement: gethostbyaddr () [function.gethostbyaddr]: l'adresse est pas sous la forme a.b.c.d dans C: \ inetpub ... \ filename.php à la ligne 212
Il semble que $ ip soit vide.
La solution
sur php.net, il est écrit ce qui suit:
La fonction
getenv
ne fonctionne pas si votre API de serveur est ASAPI (IIS). Essayez donc de ne pas utilisergetenv ('REMOTE_ADDR')
, mais$ _ SERVER ["REMOTE_ADDR"]
.
Avez-vous peut-être essayé de le faire avec $ _ SERVER
?
Autres conseils
Pourquoi n'utilisez-vous pas
Pourquoi n'utilisez-vous pas
Pourquoi n'utilisez-vous pas
Pourquoi n'utilisez-vous pas
<*>
et
<*>SERVER['REMOTE_ADDR']
et
<*>SERVER['HTTP_X_FORWARDED_FOR']
et
<*>SERVER['REMOTE_ADDR']
et
<*>Une meilleure solution a déjà été donnée. Mais toujours:
getenv('HTTP_X_FORWARD_FOR');
devrait être
getenv('HTTP_X_FORWARDED_FOR');
Ouais ... parfois les ordinateurs veulent avoir des chaînes qu'ils comprennent ;-)
Tout d’abord, getenv () prend une chaîne en tant que paramètre. Sur la ligne 207, vous devez utiliser:
getenv('HTTP_X_FORWARDED_FOR')
... au lieu de:
getenv(HTTP_X_FORWARDED_FOR)
Deuxièmement, accéder à ces variables via $ _SERVER est une solution plus fiable, car getenv () a tendance à afficher un comportement différent sur des plateformes différentes.
De plus, ces variables ne fonctionneront probablement pas si vous exécutez ce script via l'interface de ligne de commande.
Essayez un var_dump ($ ip); et voir ce que la variable contient.