40

有没有办法从命令行检测运行 PHP 脚本的服务器的名称?

对于通过 HTTP 访问的 PHP,有很多方法可以做到这一点。但似乎没有办法为 CLI 做到这一点。

例如:

$_SERVER['SERVER_NAME'] 

不能从命令行获得。

4

9 回答 9

88
echo php_uname("n");

http://php.net/manual/en/function.php-uname.php

于 2009-03-09T14:36:40.870 回答
20
<?php
echo gethostname(); // may output e.g,: sandie

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

gethostname() 是一个方便的函数,它与 PHP 5.3 的功能相同php_uname('n')并且是从 PHP 5.3 开始添加的

于 2010-12-28T13:07:21.247 回答
12

出于同样的原因,当您从 CLI 运行 PHP 时,SERVER_NAME 不可用。

当您从 CLI 运行 PHP 时,您将启动自己的 PHP 解释器,它运行您传递给它的任何代码,而无需任何类型的服务器。因此,从 CLI 来看,PHP 对您没有明确告诉它的 Web 服务器一无所知。

于 2009-03-09T14:31:53.783 回答
3

尝试:

$servername = trim(`hostname`);
于 2009-03-09T14:23:33.723 回答
3

调用 CLI 并使用 gethostname 命令:

php -r "echo gethostname();"

印刷:

your_hostname
于 2010-05-05T19:59:49.130 回答
3

为了从命令行获取主机名,还需要使用 php -r 运行。在linux上我使用:

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

在我使用的 Windows 上:

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
于 2013-04-09T12:53:42.727 回答
3

您可以将 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

路由器.php

<?php
$_SERVER['SERVER_NAME'] = 'localhost:8080';
return false;    // serve the requested resource as-is.
?> 
于 2015-06-06T16:19:20.710 回答
2

可能是因为如果您从命令行运行脚本,则不涉及服务器?

于 2009-03-09T14:21:48.393 回答
-6

其中之一可能具有服务器名称:

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

给我服务器的名称。

于 2012-11-22T10:14:17.100 回答