PHP Name Server a partir de linha de comando
-
06-07-2019 - |
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.
Solução
echo php_uname("n");
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.