PHP gethostname()-Funktion: Alles, was Sie wissen müssen
Erfahren Sie, wie PHP gethostname() den Hostnamen der Maschine zurückgibt, was bei Fehler zurückgegeben wird und wie sie sich von php_uname() unterscheidet.
Die PHP-Funktion gethostname() gibt den Hostnamen der Maschine zurück, die gerade Ihr PHP-Skript ausführt — denselben Namen, den Sie mit dem Befehl hostname im Terminal sehen würden. Sie ist nützlich, um zu protokollieren, welcher Server eine Anfrage bearbeitet hat, per-Host-Cache-Schlüssel aufzubauen oder Diagnoseinformationen in einem Admin-Panel anzuzeigen. Diese Seite behandelt die Syntax, was die Funktion zurückgibt (auch im Fehlerfall), realistische Anwendungsfälle, häufige Fallstricke und ihre Beziehung zu anderen Host-Lookup-Funktionen.
Syntax
gethostname() nimmt keine Parameter entgegen:
gethostname(): string|falseSie gibt einen string mit dem Hostnamen bei Erfolg zurück, oder false bei Fehler. Die Funktion wurde in PHP 5.3 eingeführt und ersetzt das ältere php_uname('n').
Der Hostname ist der Maschinenname, nicht der Wert des
Host:-HTTP-Headers. Auf einem Webserver gibtgethostname()den Namen des Servers zurück (zum Beispielweb-01), während die vom Besucher eingetippte Domain in$_SERVER['HTTP_HOST']steht.
Einfaches Beispiel
Das Skript fragt das Betriebssystem nach dem lokalen Maschinennamen und gibt ihn aus. Die genaue Ausgabe hängt davon ab, wo der Code ausgeführt wird — es könnte etwas wie web-01, localhost oder eine Container-ID wie a1b2c3d4e5f6 sein.
Fehler sicher behandeln
Da gethostname() false zurückgeben kann, sollten Sie das Ergebnis prüfen, bevor Sie es verwenden, anstatt anzunehmen, dass Sie immer einen string erhalten. Verwenden Sie den strikten ===-Operator, damit ein leerer string nicht mit einem Fehler verwechselt wird:
<?php
$hostname = gethostname();
if ($hostname === false) {
echo "Could not determine the host name.";
} else {
echo "Running on: $hostname";
}Wann würde ich sie verwenden?
- Protokollierung und Diagnose — Versehen Sie jede Protokollzeile mit dem Server, der sie erzeugt hat. Das ist besonders hinter einem Load Balancer wertvoll, wo viele Maschinen dieselbe Website bedienen.
- Per-Host-Cache- oder Lock-Schlüssel — Präfixe für temporäre Dateien oder Cache-Einträge, damit zwei Server nicht in Konflikt geraten.
- Gesundheits- und Statusseiten — Zeigen Sie Betreibern, welchen Knoten sie gerade betrachten.
- Verteilte Jobs — Erfassen Sie, welcher Worker eine in der Warteschlange befindliche Aufgabe übernommen hat.
gethostname() vs. verwandte Funktionen
gethostname() beantwortet nur die Frage „Wie heißt diese Maschine?". Um andere Hosts im Netzwerk nachzuschlagen, bietet PHP separate Funktionen:
gethostbyname()— Hostnamen in eine IPv4-Adresse auflösen.gethostbyaddr()— eine IP-Adresse zurück in einen Hostnamen auflösen.gethostbynamel()— die vollständige Liste der IPv4-Adressen für einen Hostnamen abrufen.
Eine häufige Folgeaufgabe besteht darin, sie zu kombinieren — den lokalen Namen ermitteln und dann in eine IP-Adresse auflösen:
<?php
$hostname = gethostname();
$ip = $hostname !== false ? gethostbyname($hostname) : 'unknown';
echo "Host: $hostname, resolved IP: $ip";Häufige Fallstricke
- Es ist nicht die Domain des Clients. Verwenden Sie
gethostname()nicht, um zu erkennen, auf welcher Site/Domain eine Anfrage eingegangen ist; lesen Sie stattdessen$_SERVER['HTTP_HOST']. - Der Wert kann in Containern unerwartet sein. Innerhalb von Docker ist der Hostname normalerweise die (zufällig generierte) Container-ID, nicht der freundliche Name Ihres Servers.
- Behandeln Sie immer
false. Ein falsch konfiguriertes System kann möglicherweise keinen Hostnamen melden; schützen Sie sich davor wie oben gezeigt.
Fazit
gethostname() ist eine kleine, parameterlose Funktion, die den Namen der Maschine zurückgibt, die Ihr Skript ausführt, oder false bei Fehler. Verwenden Sie sie für Protokollierung, Diagnose und per-Host-Schlüssel — und greifen Sie auf gethostbyname(), gethostbyaddr() oder gethostbynamel() zurück, wenn Sie andere Hosts im Netzwerk nachschlagen müssen.