2009-11-29 5 views
31

Mis à part l'évidence (localhost, 127.0.0.1) PHP (interface de ligne de commande!) A-t-il un mécanisme pour découvrir l'IP de l'ordinateur sur lequel le script tourne? ?Comment trouver l'adresse IP de mon serveur en PHP (CLI)

$_SERVER[*] ne fonctionnera pas car ce n'est pas une application Web - il s'agit d'un script de ligne de commande.

TIA

Répondre

39

Vous pouvez obtenir le nom d'hôte en utilisant gethostname

+13

Merci - c'était génial: Ma solution était: getHostByName (getHostName()) ; – ChronoFish

+0

Il s'agit d'une solution 5.3 - mais heureusement, je suis en cours d'exécution 5.3 – ChronoFish

+1

Il y a un commentaire au bas de la page pour <5.3. –

3

Si tout le reste échoue, vous pouvez toujours exec ipconfig ou ifconfig, en fonction de votre plate-forme, et analyser le résultat.

+0

Si j'avais pas été en cours d'exécution 5.3 Je suis retombé sur une solution de niveau système d'exploitation comme celui-ci . Merci! – ChronoFish

+0

pas sûr de la fiabilité, mais vous pouvez ignorer exec() et utiliser php_uname ('n') pour tirer le nom d'hôte à passer à getHostByName() – joshtronic

14

Si vous travaillez avec PHP < 5.3, cela peut aider (sur les systèmes * NIX atleast):

[email protected]:~$ cat test.php 
#!/usr/bin/env php 
<?php 

function getIPs($withV6 = true) { 
    preg_match_all('/inet'.($withV6 ? '6?' : '').' addr: ?([^ ]+)/', `ifconfig`, $ips); 
    return $ips[1]; 
} 

$ips = getIPs(); 
var_dump($ips); 

[email protected]:~$ ./test.php 
array(5) { 
    [0]=> 
    string(13) "72.67.113.141" 
    [1]=> 
    string(27) "fe80::21c:c0ff:fe4a:d09d/64" 
    [2]=> 
    string(13) "72.67.113.140" 
    [3]=> 
    string(9) "127.0.0.1" 
    [4]=> 
    string(7) "::1/128" 
} 
[email protected]:~$ 

Ou, si vous n » t anticiper le faire souvent, alors peut-être cela fonctionnerait (il suffit de ne pas abuser):

$ip = file_get_contents('http://whatismyip.org/'); 
+0

Merci - J'aime votre solution Linux/Unix mais pour cette application, je suis sous Windows ... (Oui je sais ... PHP CLI sur Windows ?!). Le webservice est bon à savoir - je dois le garder à l'esprit quand j'ai besoin de "l'extérieur du pare-feu IP" :). – ChronoFish

8

Je sais que c'est une question assez vieux, mais il ne semble pas t o être une réponse définitive (dans la mesure du possible). J'ai eu besoin de déterminer cette valeur, à la fois sur les boîtes * NIX et sur les boîtes Win X. Aussi à partir d'un script exécuté par CLI ainsi que d'un script non-CLI. La fonction suivante est la meilleure que j'ai trouvée, qui emprunte sur différents concepts dont les gens ont parlé au cours des années. Peut-être qu'il peut être utile:

function getServerAddress() { 
    if(isset($_SERVER["SERVER_ADDR"])) 
    return $_SERVER["SERVER_ADDR"]; 
    else { 
    // Running CLI 
    if(stristr(PHP_OS, 'WIN')) { 
     // Rather hacky way to handle windows servers 
     exec('ipconfig /all', $catch); 
     foreach($catch as $line) { 
     if(eregi('IP Address', $line)) { 
      // Have seen exec return "multi-line" content, so another hack. 
      if(count($lineCount = split(':', $line)) == 1) { 
      list($t, $ip) = split(':', $line); 
      $ip = trim($ip); 
      } else { 
      $parts = explode('IP Address', $line); 
      $parts = explode('Subnet Mask', $parts[1]); 
      $parts = explode(': ', $parts[0]); 
      $ip = trim($parts[1]); 
      } 
      if(ip2long($ip > 0)) { 
      echo 'IP is '.$ip."\n"; 
      return $ip; 
      } else 
      ; // TODO: Handle this failure condition. 
     } 
     } 
    } else { 
     $ifconfig = shell_exec('/sbin/ifconfig eth0'); 
     preg_match('/addr:([\d\.]+)/', $ifconfig, $match); 
     return $match[1]; 
    } 
    } 
} 
28

essayer cela, il doit renvoyer l'adresse IP du serveur

$host= gethostname(); 
$ip = gethostbyname($host); 
+1

SHOW 192.168.1.1 :) – user956584

+0

Fonctionne! Je vous remercie! – Oniz

+1

Cela ne fonctionne pas pour moi: 127.0.1.1 ... – Besnik