命令行中的 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在cli模式下取得命令行中的参数的方法-getopt命令行可传递数组-简单自定义方法取命令行参数