命令行中的 PHP 服务器名称

Posted

技术标签:

【中文标题】命令行中的 PHP 服务器名称【英文标题】:PHP Server Name from Command Line 【发布时间】:2010-10-12 04:52:09 【问题描述】:

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

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

例如:

$_SERVER['SERVER_NAME'] 

在命令行中不可用。

【问题讨论】:

我想我终于得到了一个半体面的答案: $server = system('echo $HOSTNAME');谁有更好的? @Uwe Mesecke :我不能投票赞成或反对。你的答案是最好的。虽然,它不是 100% 可移植的,因为一些主机会响应额外的垃圾。 Mac OS X Leopard 和 OpenSolaris 都只响应主机名。 RHEL3(颤抖)回应各种垃圾。 您甚至没有选项来检查您选择的答案旁边的勾号吗? 如果您需要可移植性,您可能想知道在 Windows(XP,运行 WAMP w/PHP 5.2.6)上,echo $HOSTNAME 给了我确切的信息,即 $HOSTNAME。然而,Uwe Mesecke 和 jonstjohn 的建议都适用于 Windows 和 Linux(CentOS 5 w/ PHP 5.1.6)。 @Random Echo :不,无论如何我都看不到最佳答案。投票赞成或反对表明我没有足够高的声誉。 【参考方案1】:

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

【讨论】:

【参考方案2】:
<?php
echo gethostname(); // may output e.g,: sandie

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

gethostname() 是一个方便的函数,与php_uname('n') 的作用相同,从 PHP 5.3 开始添加

【讨论】:

【参考方案3】:

调用 CLI 并使用 gethostname 命令:

php -r "echo gethostname();"

打印:

your_hostname

【讨论】:

【参考方案4】:

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

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

给我服务器的名字。

【讨论】:

【参考方案5】:

为了从 命令行 获取主机名,您还需要使用 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

【讨论】:

这对我很有帮助,很重要。赞一个! 我需要:php -r 'echo php_uname("n")."\n";'【参考方案6】:

试试:

$servername = trim(`hostname`);

【讨论】:

这似乎完全错误。 trim 只删除空格。这到底应该如何使用静态字符串作为输入? 在这种情况下它执行 linux 命令hostname,然后返回的字符串被修剪...这个技巧只适用于 linux/unix 环境。试试这个例子:echo `hostname`;【参考方案7】:
echo php_uname("n");

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

【讨论】:

我不能投票赞成或反对。你的答案是最好的。虽然,它不是 100% 可移植的,因为有些主机会响应额外的垃圾。 Mac OS X Leopard 和 OpenSolaris 都只响应主机名。 RHEL3(颤抖)回应各种垃圾。 如果你在同一个服务器(IP)上有2个域名,它会起作用吗? 机器的主机名和反向地址解析是不同的东西...... uname 返回主机名,AFAIK 每台机器应该只有一个。如果您需要反向地址查找,您应该使用 dns 客户端。 嗯,只是获取电脑名称,但我需要获取本地主机。【参考方案8】:

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

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

【讨论】:

【参考方案9】:

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

【讨论】:

无服务器,即不涉及WEB服务器。但是,我想要脚本本身实际运行的服务器的名称。

以上是关于命令行中的 PHP 服务器名称的主要内容,如果未能解决你的问题,请参考以下文章

Windows下用cmd命令实例讲解yii2.0在php命令行中运行的步骤

在 PHP 命令行中访问会话?

php在cli模式下取得命令行中的参数的方法-getopt命令行可传递数组-简单自定义方法取命令行参数

PhpStorm + XAMPP 未在命令行中显示最新的 PHP 版本

检查Linux命令行中的公共IP地址的9种方法

php PHP在命令行中