回答:
サーバーIPの場合は次のようになります。
$_SERVER['SERVER_ADDR'];
そして、これはポート
$_SERVER['SERVER_PORT'];
John K
代わりに回答を使用してください
PHPバージョン5.3以降を使用している場合は、以下を実行できます。
$host= gethostname();
$ip = gethostbyname($host);
これは、Webサーバーを介して実行するのではなく、スタンドアロンスクリプトを実行するときにうまく機能します。
/etc/hosts
ファイルに含まれている必要があり、高速になりますが、それだけの場合もあります127.0.0.1
。DNSを呼び出す必要がある場合は、言うように遅くなります。
例えば:
$_SERVER['SERVER_ADDR']
IISの場合は、次のことを試してください。
$_SERVER['LOCAL_ADDR']
$_SERVER['LOCAL_ADDR']
PHPがCGIモジュールとして実行されている場合、IISでのみ使用できます。
このページにアクセスして、自分に接続しているリモートマシンのIPアドレスではなく、自分のIPアドレスを取得する方法を探しました。
これはWindowsマシンでは機能しません。
しかし、誰かが私が探していたものを検索する場合:
#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | grep -e '192\.168\.1\.'
最も投票された回答がサーバーのパブリックアドレスを確実に返すことはありません。通常$_SERVER['SERVER_ADDR']
は正しいですが、VPN経由でサーバーにアクセスしている場合は、パブリックアドレスではなく内部ネットワークアドレスが返される可能性が高く、同じネットワーク上にない場合でも、一部の構成は空白になるか、他の設定が指定されます値。
同様に、$host= gethostname(); $ip = gethostbyname($host);
DNS(内部で構成されたレコードまたは外部のレコード)とサーバーのホスト名設定の両方に依存してサーバーのIPアドレスを推定するため、正しい値が返されないシナリオがあります。これらの手順はどちらも潜在的に欠陥があります。たとえば、サーバーのホスト名がドメイン名(つまりHOSTNAME=yahoo.com
)のようにフォーマットされている場合、(少なくとも私のphp5.4 / Centos6設定では)gethostbyname
ローカルサーバーのアドレスではなくYahoo.comのアドレスを直接検索します。
さらに、gethostbyname
パブリックDNSレコードにフォールバックするため、未公開または不正なパブリックDNSレコードを持つテストサーバー(たとえば、localhost
IPアドレスでサーバーにアクセスしている、またはローカルhosts
ファイルを使用してパブリックDNSをオーバーライドしている場合) IPアドレスが返されない(ホスト名のみが返される)か、パブリックDNSレコードに指定されている間違ったアドレスが存在する場合、またはドメインにワイルドカードがある場合は、さらに返されます。
状況に応じて、次のような方法で3番目のアプローチを試すこともできます。
$external_ip = exec('curl http://ipecho.net/plain; echo');
これには独自の欠陥があり(特定のサードパーティサイトに依存し、別のホストまたはプロキシ経由で送信接続をルーティングするネットワーク設定が存在する可能性があります)、gethostbyname
速度が遅くなる可能性があります。正直なところ、どのアプローチが最も頻繁に正しいかわかりませんが、心に留めておくべき教訓は、特定のシナリオ/構成では、これらすべてのアプローチの出力が正しくなくなるということです...可能な場合は、アプローチがusingは期待する値を返します。
これは、サーバーにインストールされたカールを心配せずに、上記の例の適応として使用できるものです。
<?php
// create a new cURL resource
$ch = curl_init ();
// set URL and other appropriate options
curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$ip = curl_exec ($ch);
echo "The public ip for this server is: $ip";
// close cURL resource, and free up system resources
curl_close ($ch);
?>
私はこれがうまくいくことを発見しました:GetHostByName( "");
Apacheウェブサーバーを実行しているWindows 7でXAMPP v1.7.1を実行します。残念ながら、それは私のゲートウェイIPアドレスを与えるだけです。
IISで$ _SERVER ['REMOTE_ADDR']と$ _SERVER ['SERVER_ADDR']を戻す単純なスクリプトを作成したので、すべての変数を変更する必要はありません。すべてのページに含まれているphpファイルにこのテキストを貼り付けるだけです。
/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
$ _SERVER配列を確認してください
echo $_SERVER['SERVER_ADDR'];
$_SERVER["SERVER_ADDR"]
はHTTPヘッダーとは何の関係もありません。これはサーバーソフトウェアによって入力され、$ _ SERVER内のすべてのHTTP関連のものはHTTP_で始まります。php.net/manual/en/reserved.variables.server.php
このような:
$_SERVER['SERVER_ADDR'];