在CLI模式下getenv('HOSTNAME')
返回HOSTNAME环境变量正确,但在脚本中调用时返回FALSE
。PHP getenv('HOSTNAME')
为什么?我如何获得脚本中的HOSTNAME变量?
在CLI模式下getenv('HOSTNAME')
返回HOSTNAME环境变量正确,但在脚本中调用时返回FALSE
。PHP getenv('HOSTNAME')
为什么?我如何获得脚本中的HOSTNAME变量?
HOSTNAME
不是CGI环境变量,因此在正常的PHP脚本中不存在。
但是您也可以使用
$hostname = `hostname`; // exec backticks
或者读取系统配置文件:
$hostname = file_get_contents("/etc/hostname"); // also only U*ix
但是大多数PHP脚本应该只使用$_SERVER["SERVER_NAME"]
或客户端所请求$_SERVER["HTTP_HOST"]
您的环境可能会在web服务器或php-fcgi/fpm启动脚本中清除,以便有关启动帐户的敏感信息不会泄漏到Web服务器。
这是阿帕奇+ mod_php的 – Dziamid 2011-05-20 10:57:19
我想你想要HTTP_HOST
然后当你在CLI模式下访问它时它是空的。
尝试一些这可能吗?
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'];
}
还存在一个ENV
变量,您可以通过访问<?php print_r($_ENV); ?>
。 但我得到了同样的结果:cli比服务器有更多的变量,但它必须是配置问题。
HOSTNAME在Apache使用的环境中不可用,但它通常在CLI使用的环境中可用。
$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'));
感谢您为我清理这个。我想我会选择使用SERVER_NAME。 – Dziamid 2011-05-20 11:01:08
'/ etc/hostname'非常linuxy。不要指望U * ix拥有它。 – Mel 2011-05-20 11:04:02