Detlef Paschke, 2022-11-25 20:56:
> Hallo,
>
> für eine kleine Auswertung einer Seite, verwende ich einen Aufruf mit
> fput, in dem unter anderem die IP und der Hostname des Benutzers
> protokolliert werden.
>
> $_SERVER["REMOTE_ADDR"] . ' | ' . gethostbyaddr($_SERVER['REMOTE_ADDR'])
>
> Kann mit gethostbyaddr() der Hostname jedoch nicht aufgelöst werden,
> wird ebenso die IP ausgegeben. Im Ergebnis stünde dann zwei mal die IP
> in der Ausgabe.
Ja, kommt vor. Nicht jede IP-Adresse kann per rDNS aufgelöst werden.
> Gibt es einen einfachen kleinen Trick, dass von gethostbyaddr() im Fall
> eines Fehler bzw. wenn der Hostname nicht aufgelöst wird, einfach ein
> "False" oder irgend so etwas ähnliches ausgegeben wird?
Nein.
Siehe auch: <
https://www.php.net/manual/de/function.gethostbyaddr.php>
"Rückgabewerte:
Gibt bei Erfolg den Hostnamen zurück, im Fehlerfall die unmodifizierte
ip oder false bei einer fehlerhaften Eingabe."
Mein Ansatz wäre:
$ipAddress = $_SERVER["REMOTE_ADDR"];
$hostName = gethostbyaddr($ipAddress);
$result = sprintf(
'%s%s',
$ipAddress,
($ipAddress !== $hostName) ? ' | ' . $hostName : ''
);
Zur Erläuterung, falls ternäre Operatoren nicht bekannt sind - die
dritte Zeile im sprintf() ist eine Abkürzung für sowas:
$ipAddress = $_SERVER["REMOTE_ADDR"];
$hostName = gethostbyaddr($ipAddress);
if ($ipAddress !== $hostName) {
$hostOutput = ' | ' . $hostName;
} else {
$hostOutput = '';
}
$result = sprintf(
'%s%s',
$ipAddress,
$hostOutput
);
--
Arno Welzel
https://arnowelzel.de