Comment identifier l'adresse IP du serveur en PHP

Comment puis-je identifier L'adresse IP du serveur en PHP?

90
demandé sur parsaya 2011-04-27 11:45:56

15 réponses

comme ceci pour le serveur ip:

$_SERVER['SERVER_ADDR'];

et ceci pour le port

$_SERVER['SERVER_PORT'];
152
répondu CloudyMarble 2016-09-14 13:04:23

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.

73
répondu John K 2013-06-11 20:50:52

par exemple:

$_SERVER['SERVER_ADDR']

quand votre on IIS, essayez:

$_SERVER['LOCAL_ADDR']
19
répondu Flask 2011-04-27 07:46:52

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.

11
répondu Ben D 2015-04-19 17:06:23

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? )

8
répondu Dom 2017-05-23 12:34:50

cochez la case $_SERVER array

echo $_SERVER['SERVER_ADDR'];
6
répondu Ale 2011-04-27 07:47:41

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.

5
répondu Stefano Zanola 2014-10-23 08:51:06

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']);
4
répondu qbert220 2011-04-27 07:54:32

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);
    ?>
4
répondu Emmanuel Mahuni 2017-11-18 09:58:41

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']; }
2
répondu Xander 2013-04-10 15:31:40
$serverIP = $_SERVER["SERVER_ADDR"];
echo "Server IP is: <b>{$serverIP}</b>";
1
répondu Axe 2011-04-27 07:48:43

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

1
répondu OpenCode 2011-04-27 08:05:50

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.

1
répondu Sanford Staab 2012-12-20 21:20:15

vérifiez le tableau $_SERVER

echo $_SERVER['SERVER_ADDR'];
-1
répondu Gaurang 2013-04-03 11:26:13

comme ceci:

$_SERVER['SERVER_ADDR'];
-2
répondu Shadow Wizard 2011-04-27 07:47:58