Wie bekomme ich die lokale IP Adresse des server mit PHP?
Ich bin der Entwicklung einer PHP-Anwendung, die ausgeführt wird nur auf dem lokalen Netzwerk eines Unternehmens. Die Anwendung wird installiert, um den server mit einer custom installer wie, was wir mit Stunnix Advanced Web Server.
Als Teil der Anwendung mehr benutzerfreundlich, ich bin Planung, um die Anzeige der LOKALE IP - des Servers so, dass es extrem einfach für die anderen Computer im Netzwerk Zugriff auf die Anwendung nur durch Eingabe dieser IP in die Adressleiste.
Das problem ist ich kann nicht das LOKALE IP - der server.
Habe ich versucht
SERVER_NAME ( Zeigt nur 127.0.0.1 )
REMOTE_ADDR ( Zeigt client die externe IP )
SERVER_ADDR zeigt die richtige IP, aber es funktioniert ja nur, wenn ich es auf einem client mit der IP, die völlig Niederlagen der Zweck.
Ich möchte nur die Anzeige der LOKALE IP - der server nach dem Zugriff direkt vom server über http://localhost
selbst.
Ich bin etwas sicher, dass dies nicht möglich ist. Aber wenn es ist, bitte helfen.
BEARBEITEN
Ich bin die Entwicklung einer cross-Plattform-PHP-server-Anwendung Art der Sache. Wir bündeln die Apache -, PHP-Monteure und eine SQlite-Datenbank, die als one-click-installer neben unseren PHP-Anwendung, um es so user freundlich wie möglich. Jeder kann installieren Sie es auf Ihrem computer ausgeführt Windows -, Mac-oder Linux -. Nach der Installation, wenn der Benutzer die Anwendung öffnet, auf dem server kann er sehen, die ip-Adresse [lokale ip] und port, die verwendet werden können, um die Verbindung zu diesem server. Die Anwendung wird nur ausgeführt, auf dem lokalen Netzwerk und nicht über das internet.
Es sollte zeigen Sie die lokale IP-genauso wie die Android-app namens " Air Droid.
Screenshot : https://lh3.ggpht.com/PmLopRm-Lj9WTnzm2MBI-bTbCLopAyqtd4C_4nvyDwLg8X0QwDbBbEREdWGHG5xku4s
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem, das Sie hier haben, ist, dass dies nicht eine statische information. Alle computer können mehrere IP-Adressen haben im Zusammenhang mit mehreren Netzwerk-Karten. Einige/alle/keiner von denen kann die web-service zur Verfügung auf Sie. Es kann nicht eine einzelne Antwort auf die Frage, die Sie Fragen, ob die OS.
Wenn Ihr server über eine einfache IP-adressenkonfiguration, dann würden Sie wahrscheinlich am besten, hard-code - es ist mit Abstand die einfachste Möglichkeit. Wenn Sie möchten, um zu bestimmen, dynamisch, hier sind ein paar bits von Informationen, die Sie hoffentlich hilfreich finden:
$_SERVER['HTTP_HOST']
enthält die Adresse, die eingegeben wurde, in der Adressleiste des Browsers, um Zugriff auf die Seite. Wenn Sie auf die Seite, indem Sie (zum Beispiel)http://192.168.0.1/index.php
in den browser$_SERVER['HTTP_HOST']
wird192.168.0.1
.gethostbyname($_SERVER['HTTP_HOST']);
drehen, dass der DNS-name in eine IP-Adresse.$_SERVER['SERVER_NAME']
enthält den Namen, der so konfiguriert wurde, dass in der Konfiguration des web-Servers, da es server-Namen. Wenn Sie verwenden können, können Sie auch einfach codieren es in der PHP.$_SERVER['SERVER_ADDR']
enthalten wird das Betriebssystem des Servers primäre IP-Adresse. Dies kann oder kann nicht die IP-Adresse, die verwendet wurde, um auf die Seite zugreifen, und es kann oder kann nicht sein eine IP-Adresse mit dem web-server gebunden. Es hängt sehr stark von Betriebssystem und server-Konfiguration. wenn der server über eine einzelne IP-Adresse, diese ist wahrscheinlich eine sichere Wette, obwohl es gibt Situationen, in denen dies enthalten kann127.0.0.1
.Die langen von den kurzen ist, dass es keinen 100% zuverlässigen Weg, um zu bestimmen, eine garantiert funktionierende IP-Adresse des web-server, ohne zu prüfen, Informationen zu senden, um die web-server, um zu generieren, die Seite, die Sie erstellen, die, wie Sie sagen
totally defeats its purpose
.Lösungen:
ifconfig -l
oderipconfig -a
Ausgang, um zu bestimmen, die IP-Adressen der Maschine, Netzwerk-Schnittstellen, ausschließen loopback-Schnittstellen. Im besten Fall erhalten Sie eine IP-Adresse - und das wird die Adresse sein, die Sie benötigen, hinzufügen$_SERVER['SERVER_PORT']
. Wenn Sie mehrere IP-Adressen - können Sie versuchen, query, Sie alle zu überprüfen, ob diese Antwort einen HTTP-Anfragen auf die$_SERVER['SERVER_PORT']
. Auch Sie könnten ein/ping.php
Datei mit irgendeiner Art vonecho "my application";
Ihre IP-Adresse ermitteln, wenn die Maschine läuft mehrere HTTP-Server auf unterschiedlichen IP-Adressen.exec()
und verwenden verschiedene parsing-algorythms, je nach OS -ipconfig -a
für windowsifconfig -l
für unix, etc.Ich bin auch ziemlich sicher, dass dies nicht möglich ist. Oder wenn es möglich ist, die Ergebnisse nicht zuverlässig.
Ein server kann mehrere IP-Adressen haben. Auch die verwendete IP-Adresse für HTTP auf den server können nicht verwendet wird, den server zu erreichen, die von anderswo (wenn es ein reverse-proxy-oder NAT beteiligt ist). Die variable SERVER_ADDR zeigt die IP-Adresse, die verwendet wurde, um call ein PHP-Skript; diese Informationen übergeben, die vom web-server, so dass es keine Hilfe für ein PHP-Skript ausgeführt wird, die stand-alone (z.B. von shell).
Schauen wir uns einen anderen Weg. Welches problem versuchst du zu lösen? Das ist, warum müssen Sie die lokale IP von dem server? Anstatt Hilfe zu bekommen, die Implementierung einer Lösung, die nicht funktioniert, schauen wir uns das ursprüngliche Problem und sehen, ob es eine andere Lösung möglich IST.
Sollte ich darauf hinweisen, dass abhängig von Ihrem Betriebssystem, möglicherweise gibt es Möglichkeiten, um eine Liste der IP-Adressen zugewiesen, um die verschiedenen Schnittstellen, die durch das Parsen der Ausgabe eines shell-Kommandos wie
ifconfig -a
oderip addr
. Aber ich weiß nicht, Ihr OS, also kann ich nicht empfehlen, wie das funktionieren würde für Sie.Könnte man mehr Logik in das PHP zu vermeiden, mit
awk
im Rohr, aber Sie bekommen die Idee.Wenn Sie möchten, zu bekommen, Lan-IP-Adresse Wie
192.168.x.x
Sie können den folgenden code verwenden:Ich bin mit diesem und erfüllt meine Anforderung perfekt. (nur getestet in windows-Maschine)
Hoffe, das hilft. =)
ipconfig
nur unter Windows. Nicht sehr nützlich.Können Sie sehen, alle verfügbaren Informationen mit dem Befehl:
Versuchen :
<?php gethostbyname($_SERVER['SERVER_NAME']);
EDIT :
Etwas hacky, aber es scheint zu funktionieren :
Aber das Vertrauen auf eine Dritte website..
Versuchen Sie es mit "ifconfig en1 "inet" - Befehl.
print_r(exec("ifconfig en1 inet"));
Ausgabe:-
inet 192.168.. netmask 0xffffff00 broadcast 192.168.*.255