2011-05-20 59 views
4

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

为什么?我如何获得脚本中的HOSTNAME变量?

回答

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"]

+0

感谢您为我清理这个。我想我会选择使用SERVER_NAME。 – Dziamid 2011-05-20 11:01:08

+2

'/ etc/hostname'非常linuxy。不要指望U * ix拥有它。 – Mel 2011-05-20 11:04:02

0

您的环境可能会在web服务器或php-fcgi/fpm启动脚本中清除,以便有关启动帐户的敏感信息不会泄漏到Web服务器。

+0

这是阿帕奇+ mod_php的 – Dziamid 2011-05-20 10:57:19

0

我想你想要HTTP_HOST然后当你在CLI模式下访问它时它是空的。

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']; 
} 
0

还存在一个ENV变量,您可以通过访问<?php print_r($_ENV); ?>。 但我得到了同样的结果:cli比服务器有更多的变量,但它必须是配置问题。

6

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 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'));