Antworten:
So für die Server-IP:
$_SERVER['SERVER_ADDR'];
und das für den Hafen
$_SERVER['SERVER_PORT'];
John K
stattdessen die Antwort von
Wenn Sie PHP Version 5.3 oder höher verwenden, können Sie Folgendes tun:
$host= gethostname();
$ip = gethostbyname($host);
Dies funktioniert gut, wenn Sie ein eigenständiges Skript ausführen und nicht über den Webserver.
/etc/hosts
Datei enthalten sein und ist schnell - obwohl dies möglicherweise nur der Fall ist 127.0.0.1
. Wenn es DNS anrufen muss, wird es langsam sein, wie Sie sagen.
beispielsweise:
$_SERVER['SERVER_ADDR']
Wenn Sie auf IIS sind, versuchen Sie:
$_SERVER['LOCAL_ADDR']
$_SERVER['LOCAL_ADDR']
ist nur unter IIS verfügbar, wenn PHP als CGI-Modul ausgeführt wird.
Ich bin auf diese Seite gekommen, um nach einer Möglichkeit zu suchen, meine eigene IP-Adresse zu erhalten, nicht die des Remote-Computers, der eine Verbindung zu mir herstellt.
Dies funktioniert nicht für einen Windows-Computer.
Aber falls jemand nach dem sucht, wonach ich gesucht habe:
#! /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;
(Schamlos angepasst von Wie erhalte ich die primäre IP-Adresse des lokalen Computers unter Linux und OS X? )
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\.'
Keine der am besten bewerteten Antworten gibt die öffentliche Adresse des Servers zuverlässig zurück. Im Allgemeinen $_SERVER['SERVER_ADDR']
ist dies korrekt, aber wenn Sie über ein VPN auf den Server zugreifen, wird wahrscheinlich die interne Netzwerkadresse anstelle einer öffentlichen Adresse zurückgegeben, und selbst wenn Sie sich nicht im selben Netzwerk befinden, sind einige Konfigurationen einfach leer oder haben eine andere Angabe Wert.
Ebenso gibt es Szenarien, in denen $host= gethostname(); $ip = gethostbyname($host);
nicht die richtigen Werte zurückgegeben werden, da sowohl DNS (entweder intern konfigurierte oder externe Einträge) als auch die Hostnameneinstellungen des Servers verwendet werden, um die IP-Adresse des Servers zu extrapolieren. Diese beiden Schritte sind möglicherweise fehlerhaft. Wenn beispielsweise der Hostname des Servers wie ein Domänenname (dh HOSTNAME=yahoo.com
) formatiert ist, wird (zumindest in meinem PHP5.4 / Centos6-Setup) gethostbyname
direkt die Adresse von Yahoo.com und nicht die des lokalen Servers gefunden.
Da gethostbyname
ein Testserver mit unveröffentlichten oder falschen öffentlichen DNS-Einträgen auf öffentliche DNS-Einträge zurückgreift (z. B. localhost
wenn Sie über Ihre IP-Adresse auf den Server zugreifen oder wenn Sie öffentlichen DNS mithilfe Ihrer lokalen hosts
Datei überschreiben ), müssen Sie Ich erhalte entweder keine IP-Adresse zurück (es wird nur der Hostname zurückgegeben) oder noch schlimmer, es wird die falsche Adresse zurückgegeben, die in den öffentlichen DNS-Einträgen angegeben ist, falls eine vorhanden ist oder wenn ein Platzhalter für die Domäne vorhanden ist.
Abhängig von der Situation können Sie auch einen dritten Ansatz ausprobieren, indem Sie Folgendes tun:
$external_ip = exec('curl http://ipecho.net/plain; echo');
Dies hat seine eigenen Mängel (hängt von einer bestimmten Site eines Drittanbieters ab, und es kann Netzwerkeinstellungen geben, die ausgehende Verbindungen über einen anderen Host oder Proxy weiterleiten) und gethostbyname
kann langsam sein. Ich bin mir ehrlich gesagt nicht sicher, welcher Ansatz am häufigsten richtig ist, aber die Lektion, die man sich zu Herzen nehmen sollte, ist, dass bestimmte Szenarien / Konfigurationen bei all diesen Ansätzen zu falschen Ergebnissen führen. Überprüfen Sie also nach Möglichkeit, ob Sie der richtige Ansatz sind using gibt die erwarteten Werte zurück.
Dies können Sie als Anpassung der obigen Beispiele verwenden, ohne sich Gedanken über die auf Ihrem Server installierte Locke machen zu müssen.
<?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);
?>
Wenn Sie PHP in der Bash-Shell verwenden, können Sie Folgendes verwenden:
$server_name=exec('hostname');
Denn $_SERVER[] SERVER_ADDR
, HTTP_HOST
und SERVER_NAME
sind nicht festgelegt.
Ich fand, dass dies für mich funktioniert: GetHostByName ("");
Ausführen von XAMPP v1.7.1 unter Windows 7 unter Ausführen des Apache-Webservers. Leider gibt es nur meine Gateway-IP-Adresse.
Ich habe gerade ein einfaches Skript erstellt, das die $ _SERVER ['REMOTE_ADDR'] und $ _SERVER ['SERVER_ADDR'] in IIS zurückbringt, damit Sie nicht jede Variable ändern müssen. Fügen Sie einfach diesen Text in Ihre PHP-Datei ein, die auf jeder Seite enthalten ist.
/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
Überprüfen Sie das Array $ _SERVER
echo $_SERVER['SERVER_ADDR'];
$_SERVER["SERVER_ADDR"]
hat nichts mit HTTP-Headern zu tun. Dies wird von der Serversoftware ausgefüllt. Allen HTTP-bezogenen Inhalten in $ _SERVER wird HTTP_ vorangestellt. php.net/manual/en/reserved.variables.server.php
So was:
$_SERVER['SERVER_ADDR'];