この記事では、PHPでサーバーのIPアドレスを正確に取得する方法の例を説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:
phpでは通常$_SERVER['HTTP_HOST']を使ってURL内のWebサイトのドメイン名やIPアドレスを取得します。
PHPマニュアルの説明は以下の通りです:
「HTTP_HOST」
Hostの内容: 現在のリクエストのヘッダー情報。
一般に、この方法では問題は発生しません。PFC3 や FLEA などの一部の一般的な PHP フレームワークも、この事前定義された変数に基づいています。
しかし、最近取り組んでいたプロジェクトで、テストのためにプログラムを顧客に渡すと、プログラムのジャンプが常に失敗することがわかりました。
最後に理由を見つけます: お客様の環境では、$_SERVER['HTTP_HOST'] によって取得される値は常に、LAN 内でプログラムが配置されているサーバーの IP 値です。
その理由は、お客様の会社はサーバーを介してインターネットに接続されており、プログラムが配置されているサーバーはドメイン名を介してマッピングされている、つまり途中に「プロキシ」プロセスが存在するためです。
したがって、そのような環境では、$_SERVER['HTTP_HOST']で取得される値は常に、LAN内でプログラムが配置されているサーバーのIP値になります。
最後に、多くの情報を確認し、symfony フレームワークでの代替実装方法を見つけました:
します
コードは以下の通りです:
$host = $_SERVER['HTTP_HOST'];
次のように置き換えます:
コードは以下の通りです:
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
この記事が皆様の PHP プログラミング設計に役立つことを願っています。