Der obige Code wird im PHP MongoDB-Datenbanktreiber verwendet, um den Hostnamen des Computers abzurufen (der Hostname ist Teil einer Eingabe, um eine eindeutige ID zu generieren). Ich bin skeptisch, dass dies den Hostnamen zurückgeben wird, daher hätte ich gerne einen Beweis.
Irgendwelche Codebeispiele wären am hilfreichsten.
Es ist keine sehr zuverlässige Methode, um den Hostnamen zu ermitteln, obwohl es manchmal funktionieren kann. (was es zurückgibt, hängt davon ab, wie /etc/hosts ist eingerichtet). Wenn Sie eine Zeile haben wie:
127.0.0.1 foobar localhost
… dann wird “foobar” zurückgegeben. Wenn Sie es jedoch umgekehrt haben, was auch üblich ist, wird nur “localhost” zurückgegeben. Ein zuverlässigerer Weg ist die Verwendung von gethostname() Funktion:
Du solltest bestehen sizeof(hostname) -1 als Länge zu gethostname(). Andernfalls könnten Sie ohne Nullterminierung enden, wenn eine Kürzung auftritt. Laut meiner Manpage: “POSIX.1 sagt, dass bei einer solchen Kürzung nicht angegeben ist, ob der zurückgegebene Puffer ein abschließendes Nullbyte enthält.”
Aber probiere es selbst aus. Vorausgesetzt, Sie haben die richtige Umgebung, sollte es in Ordnung sein.
Was ist falsch?
h_name
Der offizielle Name des Hosts (PC). Wenn Sie das DNS oder ein ähnliches Auflösungssystem verwenden, ist es der vollqualifizierte Domänenname (FQDN), der dazu geführt hat, dass der Server eine Antwort zurückgibt. Bei Verwendung einer lokalen Hosts-Datei ist dies der erste Eintrag nach der IPv4-Adresse.
Und natürlich wird DNS nicht für “localhost” verwendet, also ist die lokale Hosts-Datei relevant. Wenn Der Eintrag in der lokalen Hosts-Datei hat sowohl “localhost” als auch den echten Hostnamen, der mit derselben Adresse verknüpft ist (127.0.0.1). Und der echte Hostname ist der erste Eintrag, dann gibt h_name den echten Hostnamen zurück.
– David Gelhar
19. Mai 2010 um 13:02 Uhr
@David Gelhar: localhost ist kein Computername. localhost wird in 127.0.0.1 aufgelöst, aber es gibt keine Rückkonvertierung. en.wikipedia.org/wiki/Localhost
– Andrej
19. Mai 2010 um 13:33 Uhr
richtig, aber der Punkt ist, dass if /etc/hosts so aussieht 127.0.0.1 realname.com localhost Dann gethostbyname("localhost") gibt “realname.com” in h_name zurück, aber wenn die Reihenfolge umgekehrt wird, wird “localhost” zurückgegeben (siehe Antwort von caf).