4

からリモート URL のホスト名を取得する必要がserver scriptあります。次のいずれかの方が信頼性が高くなります。

gethostbyaddr($_SERVER['REMOTE_ADDR'])また$_SERVER['REMOTE_HOST']

4

2 に答える 2

10

これは信頼性とは何の関係もありません。両方の変数は同じではありませんが、特定の状況下では同じ値が含まれる場合があります。説明させてください:

$_SERVER['REMOTE_ADDR']

すべての場合において、リモート ホストの IP アドレスが含まれます。

$_SERVER['REMOTE_HOST']

DNS解決が有効になっている場合、DNSホスト名が含まれます(HostnameLookupsApacheディレクティブがに設定されている場合、 On@Pekkaに感謝します)。無効になっている場合$_SERVER['REMOTE_HOST']は、IP アドレスが含まれます。これは、見たことがあるかもしれません。

コードは次のようになります。

$host = $_SERVER['REMOTE_HOST'];
// if both are the same, HostnameLookups seems to be disabled.
if($host === $_SERVER['REMOTE_ADDR']) {
    // get the host name per dns call
    $host = gethostbyaddr($_SERVER['REMOTE_ADDR'])
}

注: Apache ディレクティブを制御できる場合は、パフォーマンス上の理由からオフにして、必要な場合にのみホスト名を取得することをお勧めします。gethostbyaddr()

于 2013-05-31T09:26:54.090 に答える
7

$_SERVER['REMOTE_HOST']HostnameLookupsApache ディレクティブが に設定されている場合にのみ設定されOnます。

最初に確認し$_SERVER['REMOTE_HOST']、設定されていない場合は、ホスト名の検索を行います。

内部で同じ検索メカニズムを使用するため、どちらも同じように信頼できる可能性があります。この情報の一般的な信頼性については、PHP の $_SERVER['REMOTE_ADDR'] の信頼性を参照してください。

ホスト名の検索は非常に遅くなる可能性があることに注意してください。本当に正当な理由がない限り、それらをしないでください。

于 2013-05-31T09:24:40.743 に答える