У меня есть приложение php, которое установлено на нескольких серверах и на всех наших ноутбуках разработчиков. Мне нужен быстрый и надежный способ получить имя хоста сервера или другой уникальный и надежный системный идентификатор. Вот что мы думали до сих пор:
<? $hostname = (!empty($_ENV["HOSTNAME"])) ? $_ENV["HOSTNAME"] : env('HOSTNAME'); ?>
<? $hostname = gethostbyaddr($_SERVER['SERVER_ADDR']); ?>
<? $hostname = exec('hostname'); ?>
Как вы думаете?
Что относительно gethostname () ?
Редактировать: Это может быть не вариант, я полагаю, в зависимости от вашей среды. Это новое в PHP 5.3. php_uname ('n') может работать как альтернатива.
Для PHP> = 5.3.0 используйте это :
$hostname = gethostname();
Для PHP <5.3.0, но> = 4.2.0 используйте это :
$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'));
Вы также можете использовать …
$hostname = getenv('HTTP_HOST');
Принятый ответ gethostname () может привести к неточности, если вы неточно оцените, как в моем случае
gethostname() = my-bacbook-pro (incorrect) $_SERVER['host_name'] = mysite.git (correct)
Значение из gethostname () является ошибочным. Будьте осторожны с этим.
Имя хоста дает вам имя компьютера, а не имя веб-сайта, мое плохое. Мой результат на локальной машине
gethostname() = my-bacbook-pro (which is my machine name) $_SERVER['host_name'] = mysite.git (which is my website name)
php_uname, но я не уверен, какое имя хоста вы хотите имя хоста клиента или сервера.
плюс вы должны использовать подход на основе файлов cookie
Я запускаю PHP версии 5.4 на общем хостинге, и оба они оба возвращают те же результаты:
php_uname('n'); gethostname();