2009-11-29 14 views
31

A parte l'ovvio (localhost, 127.0.0.1) PHP (interfaccia a riga di comando!) Ha un meccanismo per scoprire l'IP del computer su cui è in esecuzione lo script ?Come trovo l'indirizzo IP del mio server in PHP (CLI)

$_SERVER[*] non funziona perché questa non è un'app Web, si tratta di uno script della riga di comando.

TIA

risposta

39

È possibile ottenere il nome host utilizzando gethostname

+13

Grazie - è stato fantastico: la mia soluzione era: getHostByName (getHostName()) ; – ChronoFish

+0

È una soluzione 5.3 - ma per fortuna sto eseguendo 5.3 – ChronoFish

+1

C'è un commento in fondo alla pagina per <5.3. –

3

Se tutto il resto fallisce, si può sempre exec ipconfig o ifconfig, a seconda della piattaforma, e analizzare il risultato.

+0

se non fossi stato in esecuzione 5.3 avrei potuto ripiegare su una soluzione livello di sistema operativo come questo . Grazie! – ChronoFish

+0

non so quanto affidabile, ma potresti saltare exec() e usare php_uname ('n') per far passare il nome host da passare a getHostByName() – joshtronic

14

Se si sta lavorando con PHP < 5.3, questo può aiutare (in * NIX sistemi basati 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]:~$ 

Oppure, se si don' t anticipare farlo spesso, allora forse questo dovrebbe funzionare (solo non abusarne):

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

Grazie - Mi piace la tua soluzione Linux/Unix ma per questa app sono in esecuzione su Windows ... (Sì, lo so ... PHP CLI su Windows ?!). Il webservice è bello sapere - dovrò tenerlo a mente per quando ho bisogno di "outside the firewall IP" :). – ChronoFish

8

so che questa è una domanda piuttosto vecchio, ma ci non sembra t o essere una risposta definitiva (nella misura in cui è possibile). Ho avuto bisogno di determinare questo valore, sia su * NIX box che su Win X box. Anche da uno script eseguito CLI e uno script non CLI. La seguente funzione è la migliore che mi sia venuta in mente, che si basa su concetti diversi di cui le persone hanno parlato nel corso degli anni. Forse può essere di qualche utilità:

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

provare questo deve restituire l'indirizzo IP del server

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

SHOW 192.168.1.1 :) – user956584

+0

Funziona! Grazie! – Oniz

+1

Non funziona per me: 127.0.1.1 ... – Besnik

Problemi correlati