Есть ли способ определить имя сервера, на котором запущен скрипт PHP из командной строки?
Существует множество способов сделать это для доступа к PHP через HTTP. Но для CLI не существует способа сделать это.
Например:
$_SERVER['SERVER_NAME']
недоступен из командной строки.
echo php_uname("n");
<?php echo gethostname(); // may output eg,: sandie
См. http://php.net/manual/en/function.gethostname.php
gethostname () – это функция удобства, которая делает то же самое, что и php_uname('n')
и добавляется с PHP 5.3
SERVER_NAME недоступен при запуске PHP из CLI по той же причине.
Когда вы запускаете PHP из CLI, вы начинаете свой собственный PHP-инспектор, который запускает любой код, который вы ему передали, без какого-либо сервера. Таким образом, из CLI PHP ничего не знает о вашем веб-сервере, о котором вы явно не говорите.
Пытаться:
$servername = trim(`hostname`);
Чтобы получить имя хоста из командной строки, вам нужно будет также запустить с помощью php -r. В linux я использовал:
~#php -r 'echo php_uname("n");' hostname
В окнах я использовал:
D:\xampp\php>php -r "echo php_uname('n');" MB-PC
Кроме того, при доступе через консоль PHP не предоставляет многие из классических значений $ _SERVER, но на сервере, к которому я обращался, имеет только следующие ключи:
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
Вызовите CLI и используйте команду gethostname:
php -r "echo gethostname();"
Печать:
your_hostname
Возможно, потому что, если вы запускаете скрипт из командной строки, сервер не задействован?
Вы можете добавить свой php-скрипт в командную строку, которая установит для вас $ _SERVER ['SERVER_NAME']. Вот как я его использую:
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. ?>
Один из них может иметь имя сервера:
print_r($_SERVER) var_dump($_SERVER) echo $_SERVER['HOSTNAME']
Дает мне имя сервера.