Pergunta

Existe uma maneira de detectar o nome do servidor que executa um script PHP na linha de comando?

Existem inúmeras maneiras de fazer isso para PHP acessados ??via HTTP. Mas não parece ser uma maneira de fazer isso para CLI.

Por exemplo:

$_SERVER['SERVER_NAME'] 

não está disponível a partir da linha de comando.

Foi útil?

Outras dicas

<?php
echo gethostname(); // may output e.g,: sandie

http://php.net/manual/en/function.gethostname.php

gethostname () é uma função de conveniência, que faz o mesmo que php_uname('n') e foi adicionado a partir do PHP 5.3

O SERVER_NAME não está disponível quando você executar o PHP a partir do CLI para essa mesma razão.

Quando você executa o PHP na CLI, você iniciar o seu próprio PHP intepreter que executa qualquer código que você passados ??para ele, sem qualquer tipo de servidor. Assim, desde o CLI, PHP não sabe nada sobre o seu servidor web que você não dizê-lo explicitamente.

Tente:

$servername = trim(`hostname`);

A fim de obter o nome do host do linha de comando você precisa também executar usando php -r. No linux eu usei:

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

No windows eu usei:

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

Além disso, quando acessado através do console PHP não fornece muitos dos valores _SERVER $ clássicos, mas no servidor I acessado somente tem as seguintes chaves:

root@hermes:~# 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

Você pode adicionar seu script php a linha de comando que irá definir $ _SERVER [ 'SERVER_NAME'] para você. Aqui está como eu estou usando-o:

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

router.php

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

Chamar o CLI e use o comando gethostname:

php -r "echo gethostname();"

Prints:

your_hostname

Possivelmente porque se você executar um script a partir da linha de comando, nenhum servidor está envolvido?

Um deles pode ter o nome do servidor:

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

Dá-me o nome do servidor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top