【发布时间】:2011-08-29 13:45:39
【问题描述】:
在 CLI 模式下 getenv('HOSTNAME') 正确返回 HOSTNAME 环境变量,但在脚本中调用时返回 FALSE。
为什么?如何在脚本中获取 HOSTNAME 变量?
【问题讨论】:
标签: php linux environment-variables
在 CLI 模式下 getenv('HOSTNAME') 正确返回 HOSTNAME 环境变量,但在脚本中调用时返回 FALSE。
为什么?如何在脚本中获取 HOSTNAME 变量?
【问题讨论】:
标签: php linux environment-variables
HOSTNAME 在 Apache 使用的环境中不可用,尽管它通常在 CLI 使用的环境中可用。
$hostname = gethostname();
对于PHP < 5.3.0 but >= 4.2.0 use this:
$hostname = php_uname('n');
对于 PHP
$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'));
【讨论】:
HOSTNAME 不是 CGI 环境变量,因此不存在于普通 PHP 脚本中。
但你也可以选择使用
$hostname = `hostname`; // exec backticks
或者读取系统配置文件:
$hostname = file_get_contents("/etc/hostname"); // also only U*ix
但大多数 PHP 脚本应该只使用 $_SERVER["SERVER_NAME"] 或客户端请求的 $_SERVER["HTTP_HOST"]
【讨论】:
/etc/hostname 非常 linuxy。不要指望 U*ix 拥有它。
您的环境可能已在网络服务器或 php-fcgi/fpm 启动脚本中进行了清理,因此有关启动帐户的敏感信息不会泄露给网络服务器。
【讨论】:
我想你想要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 的变量比服务器多,但它一定是配置问题。
【讨论】: