PHP getenv('HOSTNAME')

时间:2011-05-20 10:48:41

标签: php linux environment-variables

在CLI模式下getenv('HOSTNAME')正确返回 HOSTNAME 环境变量,但在脚本中调用时返回FALSE

为什么呢?如何在脚本中获取HOSTNAME变量?

6 个答案:

答案 0 :(得分:7)

HOSTNAME在Apache使用的环境中不可用,尽管它通常在CLI使用的环境中可用。

PHP >= 5.3.0 use this

$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比服务器更具变量,但它必须是配置问题。