ZetCode

PHP gethostname 函数

最后修改于 2025 年 4 月 4 日

PHP 的 gethostname 函数用于检索本地计算机的标准主机名。它对于服务器标识和日志记录非常有用。

基本定义

gethostname 返回 PHP 运行所在机器的主机名。这与 Unix 中的 hostname 命令返回的名称相同。

语法:gethostname(): string|false。成功时返回主机名字符串,失败时返回 false。不需要参数。

基本主机名检索

此示例演示了 gethostname 函数的最简单用法。

basic_hostname.php
<?php

declare(strict_types=1);

$hostname = gethostname();
echo "Server hostname: $hostname";

此代码检索并显示当前服务器的主机名。主机名通常在系统配置期间设置。

错误处理示例

此示例显示了如何正确处理潜在的故障。

error_handling.php
<?php

declare(strict_types=1);

$hostname = gethostname();

if ($hostname === false) {
    echo "Failed to retrieve hostname";
} else {
    echo "Hostname: $hostname";
}

始终检查 false 的返回值,因为该函数在极少数情况下可能会失败。这确保了您的应用程序能够优雅地处理错误。

在日志记录中使用主机名

这演示了在应用程序日志中使用主机名以获得更好的调试效果。

logging_example.php
<?php

declare(strict_types=1);

function logMessage(string $message): void {
    $hostname = gethostname();
    $timestamp = date('Y-m-d H:i:s');
    file_put_contents('app.log', "[$timestamp] [$hostname] $message\n", FILE_APPEND);
}

logMessage("Application started");

将主机名包含在日志中有助于识别生成日志条目的服务器。这在分布式系统中尤其有用。

基于主机名的配置

此示例显示如何根据主机名加载不同的配置。

hostname_config.php
<?php

declare(strict_types=1);

$hostname = gethostname();

switch ($hostname) {
    case 'production-server':
        $config = require 'config.prod.php';
        break;
    case 'staging-server':
        $config = require 'config.stage.php';
        break;
    default:
        $config = require 'config.dev.php';
}

此模式允许不同的环境自动加载适当的配置,而无需手动干预。

与 $_SERVER 变量进行比较

此示例将 gethostname 与 SERVER_NAME 和 HTTP_HOST 变量进行比较。

server_vars.php
<?php

declare(strict_types=1);

echo "gethostname(): " . gethostname() . "\n";
echo "\$_SERVER['SERVER_NAME']: " . ($_SERVER['SERVER_NAME'] ?? 'N/A') . "\n";
echo "\$_SERVER['HTTP_HOST']: " . ($_SERVER['HTTP_HOST'] ?? 'N/A') . "\n";

gethostname 返回机器名,而 SERVER_NAME 和 HTTP_HOST 返回 Web 服务器的配置值。在 Web 环境中,它们通常不同。

最佳实践

来源

PHP gethostname 文档

本教程通过用于服务器标识和特定于环境的逻辑的实际示例,介绍了 PHP 的 gethostname 函数。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PHP 网络函数