PHP getenv ('HOSTNAME') - PullRequest
       24

PHP getenv ('HOSTNAME')

4 голосов
/ 20 мая 2011

В режиме CLI getenv('HOSTNAME') возвращает HOSTNAME переменную среды правильно, но при вызове в скрипте возвращает FALSE.

Почему?Как получить переменную HOSTNAME в скрипте?

Ответы [ 6 ]

7 голосов
/ 08 ноября 2011

HOSTNAME недоступен в среде, используемой Apache, хотя обычно он доступен в среде, используемой CLI.

Для PHP> = 5.3.0 используйте это :

$hostname = gethostname();

Для PHP <5.3.0, но> = 4.2.0 используйте это :

$hostname = php_uname('n');

Для PHP <4.2.0 используйте это: </p>

$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')); 
6 голосов
/ 20 мая 2011

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 голосов
/ 20 мая 2011

Существует также переменная ENV, доступ к которой можно получить с помощью <?php print_r($_ENV); ?>.Но я получаю то же самое: cli имеет большую переменную, чем сервер, но это должно быть проблемой конфигурации.

0 голосов
/ 20 мая 2011

может попробовать что-то подобное?

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 голосов
/ 20 мая 2011

Я думаю, что вы хотите HTTP_HOST, который затем будет пустым при доступе к нему в режиме CLI.

0 голосов
/ 20 мая 2011

Скорее всего, ваша среда очищена в скрипте запуска php-fcgi / fpm, поэтому конфиденциальная информация об учетной записи запуска не попадет на веб-сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...