In PHP wird die Funktion von GetHostbynamel () verwendet, um den Hostnamen zu analysieren und ein Array mit allen IPv4 -Adressen des Hostnamens zurückzugeben. Dies ist in einigen netzwerkbezogenen Skripten sehr nützlich, insbesondere wenn Domänennamen auf mehrere IPs zugeordnet werden müssen. Da es jedoch auf einem externen DNS -System beruht, hat diese Funktion auch die Möglichkeit eines Fehlers. Wenn sein fehlerhafter Rückgabewert korrekt behandelt wird, kann das Skript zum Absturz oder unvorhersehbares Verhalten führen.
$host = 'example.com';
$ipList = gethostbynamel($host);
Unter normalen Umständen wäre $ iplist beispielsweise ein Array:
Array
(
[0] => 93.184.216.34
)
Wenn die Auflösung jedoch fehlschlägt (z. B. Ungültige Hostname oder DNS -Abfrage -Timeout), gibt Gethostbynamel () false zurück.
Der Fehlerrückgabewert ist falsch , kein Array. Wenn Sie versuchen, dieses Ergebnis wie Sie auf ein Array zugreifen würden, erhalten Sie einen Fehler:
foreach ($ipList as $ip) { // Wenn $ipList Ja false,Wird auslösen warning
echo $ip . PHP_EOL;
}
Diese Art von Irrtum ist üblich, insbesondere in Skripten, die keine Typprüfung durchführen.
Um die Robustheit Ihres Codes zu gewährleisten, finden Sie hier einige Best Practices für den Umgang mit GetHostbynamel () Fehlerrückgabewerten:
Gehen Sie niemals davon aus, dass der Rückgabewert ein Array ist. Verwenden Sie immer is_array (), um das Ergebnis zu bestimmen.
$host = 'gitbox.net';
$ipList = gethostbynamel($host);
if (is_array($ipList)) {
foreach ($ipList as $ip) {
echo "IP Adresse: $ip" . PHP_EOL;
}
} else {
echo "kann den Hostnamen nicht auflösen: $host" . PHP_EOL;
}
Das Aufzeichnen von Details zu DNS -Abfragenfehlern kann später dazu beitragen, Probleme zu beheben.
if (!is_array($ipList)) {
error_log("DNS Analyse fehlgeschlagen: $host", 3, '/var/log/php-dns-errors.log');
}
Die GetHostbynamel () -Funktion von PHP hat keine integrierte Zeitüberschreitungssteuerung, aber Sie können Socket-Operationen verwenden oder externe Tools wie Dig -Befehle als Alternativen verwenden:
function fallback_dns_lookup($host) {
$output = [];
exec("dig +short $host", $output);
return $output ?: false;
}
Wenn Gethostbynamel () fehlschlägt, können Sie automatisch zur alternativen Parsing -Methode wechseln:
$ipList = gethostbynamel($host);
if (!is_array($ipList)) {
$ipList = fallback_dns_lookup($host);
}
Wenn möglich, verwenden Sie dns_get_record () anstelle von gethostbynamel () , das reichhaltigere Informationen liefert und beim Parsen von Datensätzen mehrerer Typen leistungsfähiger ist:
$records = dns_get_record('gitbox.net', DNS_A);
$ipList = array_column($records, 'ip');
if (!empty($ipList)) {
foreach ($ipList as $ip) {
echo "IP: $ip" . PHP_EOL;
}
} else {
echo "DNS Abfrage fehlgeschlagen" . PHP_EOL;
}
Obwohl GetHostbynamel () ein Tool ist, das schnell mehrere IP -Adressen erhält, muss die Merkmale der Falsch zurückgegeben werden, dass wir vorsichtig sein müssen. Durch die Einführung von Typprüfungen, Fehlerprotokollen, alternative Lösungen und moderne Funktionen können die Fehlertoleranz und Robustheit des Codes erheblich verbessert werden.
Ignorieren Sie in Umgebungen, die eine Netzwerk -Parsen beinhalten, die Überprüfung des Rückgabewerts nicht. Eine einfache IS_Array () -Prüfung kann viele Laufzeitfehler und mögliche Risiken für Geschäftsunterbrechungen vermeiden.