Comment identifier l'adresse IP du serveur en PHP
15 réponses
comme ceci pour le serveur ip:
$_SERVER['SERVER_ADDR'];
et ceci pour le port
$_SERVER['SERVER_PORT'];
si vous utilisez PHP version 5.3 ou supérieure, vous pouvez faire ce qui suit:
$host= gethostname();
$ip = gethostbyname($host);
Cela fonctionne bien lorsque vous exécutez un script autonome, pas par le serveur web.
par exemple:
$_SERVER['SERVER_ADDR']
quand votre on IIS, essayez:
$_SERVER['LOCAL_ADDR']
aucune des réponses les plus populaires ne retournera de façon fiable l'adresse publique du serveur. En général $_SERVER['SERVER_ADDR']
sera correct, mais si vous accédez au serveur via un VPN, il est probable que vous retournerez l'adresse réseau interne plutôt qu'une adresse publique, et même si vous n'êtes pas sur le même réseau, certaines configurations seront simplement vides ou auront une autre valeur spécifiée.
de même, il y a des scénarios où $host= gethostname(); $ip = gethostbyname($host);
ne retournera pas les valeurs correctes parce qu'il s'appuie à la fois sur les DNS (configurés en interne ou externes) et sur les paramètres de nom d'hôte du serveur pour extrapoler l'adresse IP du serveur. Ces deux étapes sont potentiellement défectueux. Par exemple, si le nom d'hôte du serveur est formaté comme un nom de domaine (i.e. HOSTNAME=yahoo.com
) alors (au moins sur mon php5.4 / Installation Centos6) gethostbyname
passera directement à la recherche Yahoo.com l'adresse du serveur plutôt que celle du serveur local.
en outre, parce que gethostbyname
renvoie aux enregistrements DNS publics un serveur de test avec des enregistrements DNS publics non publiés ou incorrects (par exemple, vous accédez au serveur par localhost
ou une adresse IP, ou si vous écrasez un DNS public en utilisant votre fichier hosts
local), alors vous obtiendrez soit aucune adresse IP (il vous suffira de retourner le nom de l'hôte) ou pire, il retournera la mauvaise adresse spécifiée dans les enregistrements DNS publics si l'un existe ou s'il y a un joker pour le domaine.
Selon la situation, vous pouvez également essayer une troisième approche, en faisant quelque chose comme ceci:
$external_ip = exec('curl http://ipecho.net/plain; echo');
cela a ses propres défauts (dépend d'un site tiers spécifique, et il pourrait y avoir des paramètres de réseau qui acheminent les connexions sortantes à travers un hôte différent ou un proxy) et comme gethostbyname
il peut être lent. Honnêtement, je ne suis pas sûr de savoir quelle approche sera correcte le plus souvent, mais la leçon à retenir est que des scénarios/configurations spécifiques seront il en résulte des extrants incorrects pour toutes ces approches... donc, si possible, en vérifier que l'approche que vous utilisez est de retourner les valeurs que vous attendez.
je suis venu sur cette page à la recherche d'un moyen d'obtenir ma propre adresse ip Pas celle de la machine distante qui se connecte à moi.
Cela ne fonctionnera pas pour une machine windows.
mais au cas où quelqu'un cherche ce que je cherchais:
#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;
(adapté sans vergogne de Comment obtenir L'adresse IP primaire de la machine locale sous Linux et OS X? )
si vous utilisez PHP en shell bash vous pouvez utiliser:
$server_name=exec('hostname');
parce que $_SERVER[] SERVER_ADDR
, HTTP_HOST
et SERVER_NAME
ne sont pas définis.
les réponses précédentes donnent toutes $_SERVER['SERVER_ADDR']. Cela ne fonctionnera pas sur certaines installations IIS. Si vous voulez que cela fonctionne sur IIS, puis utiliser ce qui suit:
$server_ip = gethostbyname($_SERVER['SERVER_NAME']);
c'est ce que vous pouvez utiliser comme une adaptation des exemples ci-dessus sans vous soucier de curl installé sur votre serveur.
<?php
// create a new cURL resource
$ch = curl_init ();
// set URL and other appropriate options
curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$ip = curl_exec ($ch);
echo "The public ip for this server is: $ip";
// close cURL resource, and free up system resources
curl_close ($ch);
?>
je viens de créer un script simple qui ramènera les $_SERVER['REMOTE_ADDR'] et $_SERVER['SERVER_ADDR'] dans IIS pour que vous n'ayez pas à changer chaque variable. Il suffit de coller ce texte dans votre fichier php qui est inclus dans chaque page.
/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
$serverIP = $_SERVER["SERVER_ADDR"];
echo "Server IP is: <b>{$serverIP}</b>";
vous pourriez avoir à utiliser $HTTP_SERVER_VARS['server_ADDR']
si vous n'obtenez rien des réponses ci-dessus et si vous utilisez une version plus ancienne de PHP
j'ai trouvé ça pour travailler pour moi: GetHostByName ("");
exécutant XAMPP v1.7.1 sur Windows 7 avec Apache webserver. Malheureusement, il suffit de donner mon adresse ip passerelle.