2009-03-09 24 views
31

¿Hay alguna forma de detectar el nombre del servidor que ejecuta un script PHP desde la línea de comandos?Nombre del servidor PHP de la línea de comandos

Existen numerosas formas de hacer esto para PHP al que se accede a través de HTTP. Pero no parece haber una manera de hacer esto para CLI.

Por ejemplo:

$_SERVER['SERVER_NAME'] 

no está disponible desde la línea de comandos.

+1

creo que por fin tengo una respuesta semi-decente: $ server = system ('echo $ HOSTNAME'); ¿Alguien tiene algo mejor? – Justin

+0

@Uwe Mesecke: No puedo votar hacia arriba o hacia abajo. Tu respuesta es la mejor Sin embargo, no es 100% portátil, porque algunos hosts responden con basura extra en eso. Mac OS X Leopard y OpenSolaris responden solo con el nombre de host. RHEL3 (estremecimiento) responde con todo tipo de basura. – Justin

+0

¿Ni siquiera tiene la opción de marcar la casilla junto a la respuesta que ha elegido? – random

Respuesta

74
+2

No puedo votar hacia arriba o hacia abajo. Tu respuesta es la mejor Sin embargo, no es 100% portátil, porque algunos hosts responden con basura extra en eso. Mac OS X Leopard y OpenSolaris responden solo con el nombre de host. RHEL3 (estremecimiento) responde con todo tipo de basura. – Justin

+0

¿Funcionará si tiene 2 nombres de dominio en el mismo servidor (IP)? – Genjo

+0

El nombre de host de la máquina y la resolución de la dirección inversa son cosas diferentes ... uname devuelve el nombre de host y AFAIK debe haber solo uno por máquina. Si necesita una búsqueda de dirección inversa, debe usar un cliente DNS. –

1

Posiblemente porque si ejecuta un script desde la línea de comandos, ¿no está involucrado ningún servidor?

+1

Sin servidor en el sentido de que no se trata de un servidor WEB. Sin embargo, quiero el nombre del servidor en el que se está ejecutando realmente el script. – Justin

3

Probar:

$servername = trim(`hostname`); 
+1

esto parece completamente erróneo. trim solo elimina los espacios en blanco. ¿cómo diablos debería funcionar eso con una cadena estática como entrada? – Umingo

+0

en este caso, ejecuta el comando linux 'hostname', luego se recorta la cadena devuelta ... este truco funcionará solo en un entorno Linux/Unix. Pruebe este ejemplo: echo \ 'hostname'; –

10

El SERVER_NAME no está disponible cuando se ejecuta PHP desde la CLI para esa misma razón.

Cuando ejecuta PHP desde la CLI, inicia su propio intérprete PHP que ejecuta el código que le pasó, sin ningún tipo de servidor. Entonces, desde la CLI, PHP no sabe nada sobre su servidor web que usted no lo diga explícitamente.

2

llama al CLI y utilizar el comando gethostname:

php -r "echo gethostname();" 

Prints:

your_hostname 
-5

Uno de ellos puede tener el nombre del servidor:

print_r($_SERVER) 
var_dump($_SERVER) 
echo $_SERVER['HOSTNAME'] 

me da el nombre de la servidor.

+4

Esto no funciona en CLI. – cweiske

+1

-1 no funciona en cli – Sebastian

2

Para obtener el nombre de host de la línea de comandos , deberá ejecutar también utilizando php -r. En Linux que utiliza:

~#php -r 'echo php_uname("n");' 
hostname 

En las ventanas que utiliza:

D:\xampp\php>php -r "echo php_uname('n');" 
MB-PC 

Además, cuando se accede a través del PHP consola no proporciona muchos de los valores _SERVER $ clásicos, pero en el servidor que sólo accederá tiene las siguientes teclas:

[email protected]:~# php -r 'foreach($_SERVER as $key =>$value){echo $key.",";}' 
TERM,SHELL,SSH_CLIENT,SSH_TTY,USER,LS_COLORS,MAIL,PATH,PWD,LANG,SHLVL,HOME,LOGNAME,SSH_CONNECTION,LESSOPEN,LESSCLOSE,_,PHP_SELF,SCRIPT_NAME,SCRIPT_FIL 
ENAME,PATH_TRANSLATED,DOCUMENT_ROOT,REQUEST_TIME,argv,argc 
+1

Esto me ayudó justo ahora, a lo grande. ¡Prestigio! –

+0

Necesitaba: php -r 'echo php_uname ("n"). "\ N";' – zzapper

1

usted puede añadir su script php para comandar la línea que marcará $ _SERVER [ 'SERVER_NAME'] para usted. Así es como lo estoy usando:

C: \ SDK \ php-5.5.25-Win32-VC11-x86 \ php.exe -S localhost: 8080 -t D: \ Proyectos \ Sites \ mysite router.php

router.php

<?php 
$_SERVER['SERVER_NAME'] = 'localhost:8080'; 
return false; // serve the requested resource as-is. 
?> 
Cuestiones relacionadas