在CLI模式下getenv('HOSTNAME')
正确返回 HOSTNAME 环境变量,但在脚本中调用时返回FALSE
。
为什么呢?如何在脚本中获取HOSTNAME变量?
答案 0 :(得分:7)
HOSTNAME在Apache使用的环境中不可用,尽管它通常在CLI使用的环境中可用。
$hostname = gethostname();
PHP < 5.3.0 but >= 4.2.0 use this:
$hostname = php_uname('n');
对于PHP&lt; 4.2.0使用此:
$hostname = getenv('HOSTNAME');
if(!$hostname) $hostname = trim(`hostname`);
if(!$hostname) $hostname = exec('echo $HOSTNAME');
if(!$hostname) $hostname = preg_replace('#^\w+\s+(\w+).*$#', '$1', exec('uname -a'));
答案 1 :(得分:6)
HOSTNAME
不是CGI环境变量,因此在普通PHP脚本中不存在。
但你也可以使用
$hostname = `hostname`; // exec backticks
或者阅读系统配置文件:
$hostname = file_get_contents("/etc/hostname"); // also only U*ix
但是大多数PHP脚本应该只使用$_SERVER["SERVER_NAME"]
或客户端请求的$_SERVER["HTTP_HOST"]
答案 2 :(得分:0)
您的环境可能已在网络服务器或php-fcgi / fpm启动脚本中清除,因此有关启动帐户的敏感信息不会泄露给网络服务器。
答案 3 :(得分:0)
我认为您希望HTTP_HOST
在CLI模式下访问时为空。
答案 4 :(得分:0)
尝试这样的事情吗?
function getHostName()
{
//if we are in the shell return the env hostname
if(array_key_exists('SHELL', $_ENV))
{
return getenv('HOSTNAME');
}
return $_SERVER['SERVER_NAME'];
}
答案 5 :(得分:0)
您还可以通过ENV
访问<?php print_r($_ENV); ?>
变量。
但我得到了同样的事情:cli比服务器更具变量,但它必须是配置问题。