2009-11-29 45 views

Respuesta

39

Usted puede obtener el nombre de host mediante el uso de gethostname

+13

Gracias - esto fue genial: Mi solución fue: getHostByName (getHostName()) ; – ChronoFish

+0

Es una solución de 5.3, pero afortunadamente ejecuto 5.3 – ChronoFish

+1

. Hay un comentario en la parte inferior de la página para <5.3. –

3

Si todo lo demás falla, siempre se puede exec ipconfig o ifconfig, dependiendo de la plataforma, y ​​analizar el resultado.

+0

si no hubiera estado funcionando 5.3 me hubiera caído de nuevo en una solución de nivel de sistema operativo como éste . ¡Gracias! – ChronoFish

+0

no estoy seguro de qué tan confiable, pero puede omitir exec() y usar php_uname ('n') para pasar el nombre de host para pasar a getHostByName() – joshtronic

14

Si está trabajando con PHP < 5.3, esto puede ayudar (en * NIX al menos los sistemas basados):

[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]:~$ 

O, si no' t anticipar lo hace a menudo, entonces tal vez esto funcionaría (sólo no abusar de ella):

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

Gracias - Me gusta su solución Linux/Unix, pero para esta aplicación me estoy ejecutando en Windows ... (Sí, lo sé ... PHP CLI en Windows ?!). Es bueno saber sobre el servicio web. Tendré que tenerlo en cuenta cuando necesite "fuera del firewall IP" :). – ChronoFish

8

sé que esto es una pregunta bastante antiguo, pero no parece t o ser una respuesta definitiva (en la medida en que sea posible). He tenido la necesidad de determinar este valor, tanto en cuadros * NIX como en cuadros de Win X. También desde un script CLI ejecutado, así como un script que no es CLI. La siguiente función es la mejor que he encontrado, que toma prestados diferentes conceptos de los que la gente ha hablado a lo largo de los años. Tal vez puede ser de alguna utilidad:

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

probar esto se debe devolver la dirección IP del servidor

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

MOSTRAR 192.168.1.1 :) – user956584

+0

¡Funciona! ¡Gracias! – Oniz

+1

No funciona para mí: 127.0.1.1 ... – Besnik

Cuestiones relacionadas