real - Cómo identificar la dirección IP del servidor en PHP
php get ip server (15)
Acabo de crear un script simple que devolverá $ _SERVER [''REMOTE_ADDR''] y $ _SERVER [''SERVER_ADDR''] en IIS para que no tenga que cambiar todas las variables. Simplemente pegue este texto en su archivo php que se incluye en cada página.
/** IIS IP Check **/
if(!$_SERVER[''SERVER_ADDR'']){ $_SERVER[''SERVER_ADDR''] = $_SERVER[''LOCAL_ADDR'']; }
if(!$_SERVER[''REMOTE_ADDR'']){ $_SERVER[''REMOTE_ADDR''] = $_SERVER[''LOCAL_ADDR'']; }
¿Cómo puedo identificar la dirección IP del servidor en PHP?
Compruebe la matriz $ _SERVER
echo $_SERVER[''SERVER_ADDR''];
Compruebe la matriz $_SERVER
echo $_SERVER[''SERVER_ADDR''];
Encontré que esto funcionaba para mí: GetHostByName ("");
Ejecución de XAMPP v1.7.1 en Windows 7 con el servidor web Apache. Lamentablemente, solo le doy la dirección IP de mi puerta de enlace.
Esto es lo que podría usar como una adaptación de los ejemplos anteriores sin preocuparse por curl instalado en su servidor.
<?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);
?>
Llegué a esta página buscando la forma de obtener mi propia dirección IP, no la de la máquina remota que se conecta a mí.
Esto no funcionará para una máquina de Windows.
Pero en caso de que alguien busque lo que estaba buscando:
#! /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;
(Descaradamente adaptado de ¿Cómo obtengo la dirección IP principal de la máquina local en Linux y OS X? )
Me gusta esto para la IP del servidor:
$_SERVER[''SERVER_ADDR''];
y esto para el puerto
$_SERVER[''SERVER_PORT''];
Me gusta esto:
$_SERVER[''SERVER_ADDR''];
Ninguna de las respuestas más votadas devolverá de manera confiable la dirección pública del servidor. En general, $_SERVER[''SERVER_ADDR'']
será correcto, pero si accede al servidor a través de una VPN, probablemente devuelva la dirección de red interna en lugar de una dirección pública, e incluso cuando no esté en la misma red, algunas configuraciones serán simplemente estar en blanco o tener algún otro valor especificado.
Del mismo modo, hay escenarios donde $host= gethostname(); $ip = gethostbyname($host);
$host= gethostname(); $ip = gethostbyname($host);
no devolverá los valores correctos porque se basa tanto en DNS (ya sea internamente o en registros externos) como en la configuración del nombre de host del servidor para extrapolar la dirección IP del servidor. Ambos pasos son potencialmente defectuosos. Por ejemplo, si el nombre de host del servidor está formateado como un nombre de dominio (es decir, HOSTNAME=yahoo.com
), entonces (al menos en mi configuración de php5.4 / Centos6) gethostbyname
se saltará directamente para encontrar la dirección de Yahoo.com en lugar de la local. servidor.
Además, como gethostbyname
recae en registros DNS públicos, un servidor de prueba con registros DNS públicos no publicados o incorrectos (por ejemplo, está accediendo al servidor por localhost
o dirección IP, o si está anulando el DNS público utilizando su archivo de hosts
local) luego, no recibirá ninguna dirección IP (simplemente devolverá el nombre de host) o, incluso peor, devolverá la dirección incorrecta especificada en los registros DNS públicos, si existe, o si hay un comodín para el dominio.
Dependiendo de la situación, también puedes probar un tercer enfoque haciendo algo como esto:
$external_ip = exec(''curl http://ipecho.net/plain; echo'');
Esto tiene sus propios defectos (se basa en un sitio de terceros específico, y puede haber configuraciones de red que enrutan las conexiones de salida a través de un host o proxy diferente) y al igual que gethostbyname
, puede ser lento. Sinceramente, no estoy seguro de qué enfoque será el correcto más a menudo, pero la lección que debe tomarse en serio es que los escenarios / configuraciones específicos darán como resultado resultados incorrectos para todos estos enfoques ... así que si es posible, verifique que el enfoque sea usar es devolver los valores que esperas.
Puede que tenga que usar $HTTP_SERVER_VARS[''server_ADDR'']
si no obtiene nada de las respuestas anteriores y si está utilizando una versión anterior de PHP
Si está utilizando PHP en bash shell puede usar:
$server_name=exec(''hostname'');
Porque $_SERVER[] SERVER_ADDR
, HTTP_HOST
y SERVER_NAME
no están configurados.
Si está utilizando PHP versión 5.3 o superior, puede hacer lo siguiente:
$host= gethostname();
$ip = gethostbyname($host);
Esto funciona bien cuando ejecuta una secuencia de comandos independiente, no se ejecuta a través del servidor web.
Todas las respuestas anteriores dan $ _SERVER [''SERVER_ADDR'']. Esto no funcionará en algunas instalaciones de IIS. Si desea que esto funcione en IIS, use lo siguiente:
$server_ip = gethostbyname($_SERVER[''SERVER_NAME'']);
por ejemplo:
$_SERVER[''SERVER_ADDR'']
cuando esté en IIS, intente:
$_SERVER[''LOCAL_ADDR'']
$serverIP = $_SERVER["SERVER_ADDR"];
echo "Server IP is: <b>{$serverIP}</b>";