Comment puis-je obtenir l'adresse IP locale du serveur à l'aide de PHP?
Je développe une application en PHP qui sera exécuté uniquement sur le réseau local d'une entreprise. L'application sera installée sur le serveur à l'aide d'un installateur comme la chose que nous avons faite à l'aide de Stunnix Avancée du Serveur.
Dans le cadre de l'application de plus en plus conviviale je suis de planification pour afficher la IP LOCALE du serveur de sorte qu'il est extrêmement facile pour les autres ordinateurs du réseau pour accéder à l'application par juste en tapant cette adresse dans leur barre d'adresse.
Le problème est que je ne peut pas obtenir la IP LOCALE du serveur.
J'ai essayé
SERVER_NAME ( Affiche juste 127.0.0.1 )
REMOTE_ADDR ( Affiche client IP externe )
SERVER_ADDR affiche l'adresse IP correcte, mais elle ne le fait que si j'y accéder à partir d'un client à l'aide de l'IP qui a totalement défaites de son but.
Je veux juste afficher le IP LOCALE du serveur lors de l'accès directement à partir du serveur par le biais de http://localhost
lui-même.
Je suis assez sûr que ce n'est pas possible. Mais si elle l'est, s'il vous plaît aider.
MODIFIER
Je suis en train d'élaborer une plate-forme de serveur PHP application genre de chose. Nous regroupons Apache,PHP installateurs et une base de données SQlite comme un seul clic installer à côté de notre application PHP pour le rendre le plus convivial possible. N'importe qui peut le déployer sur leur ordinateur exécutant Windows,Mac ou Linux. Après l'installation lorsque l'utilisateur ouvre l'application sur le serveur, il peut voir la adresse ip [ip] et le port qui peut être utilisé pour se connecter à ce serveur. L'application sera exécutée uniquement sur le réseau local et pas sur internet.
Il doit afficher l'adresse IP locale tout comme l'application Android appelée Air Droid.
Capture d'écran : https://lh3.ggpht.com/PmLopRm-Lj9WTnzm2MBI-bTbCLopAyqtd4C_4nvyDwLg8X0QwDbBbEREdWGHG5xku4s
OriginalL'auteur ajaybc | 2012-03-28
Vous devez vous connecter pour publier un commentaire.
Le problème que vous avez ici, c'est que ce n'est pas statique de l'information. Tout ordinateur peut avoir plusieurs adresses IP associées avec plusieurs cartes réseau. Certains/tous/aucun de ceux-ci peuvent avoir les services web disponibles sur eux. Il n'y a pas de réponse unique à la question vous demandant de l'OS.
Si votre serveur ne dispose que d'un simple configuration de l'adresse IP, alors vous serait probablement mieux coder en dur, c'est de loin l'option la plus simple. Si vous souhaitez déterminer de façon dynamique, voici quelques bits d'information qui vous permettra de trouver utiles:
$_SERVER['HTTP_HOST']
contient l'adresse qui a été tapé dans la barre d'adresse du navigateur afin d'accéder à la page. Si vous accédez à la page en tapant " (par exemple)http://192.168.0.1/index.php
dans le navigateur,$_SERVER['HTTP_HOST']
sera192.168.0.1
.gethostbyname($_SERVER['HTTP_HOST']);
tournera que DNS nom en une adresse IP.$_SERVER['SERVER_NAME']
contient le nom qui a été configuré dans la configuration du serveur web, comme c'est le serveur de nom. Si vous allez utiliser cela, vous pourriez tout aussi bien le code en PHP.$_SERVER['SERVER_ADDR']
contiendra le système d'exploitation du serveur d'adresse IP primaire. Cela peut ou peut ne pas être l'adresse IP utilisée pour accéder à la page, et il peut ou ne peut pas être une adresse IP avec le serveur web lié à celui-ci. Il dépend fortement de l'OS et de la configuration du serveur. si le serveur a une adresse IP unique, c'est probablement a fort à parier, même si il y a des situations où cela peut contenir127.0.0.1
.Le long de la position courte est qu'il n'est pas 100% fiable pour déterminer une garantie de travail adresse IP du serveur web, sans examen de l'information qui a été envoyer sur le serveur web dans le but de générer la page en cours de création, qui comme vous le dites
totally defeats its purpose
.C'est ce que le DNS est... si c'est local, vous pouvez utiliser les noms de machine pour accéder au réseau, si c'est sur internet, sur le point d'un domaine/sous-domaine est Un dossier à votre IP 😉
OriginalL'auteur DaveRandom
Solutions:
ifconfig -l
ouipconfig -a
sortie de déterminer les adresses IP de la machine interfaces réseau, exclure une interface de loopback. Dans le meilleur des cas, vous recevrez une adresse IP - et ce sera l'adresse que vous avez besoin, en ajoutant$_SERVER['SERVER_PORT']
. Si vous allez obtenir plusieurs adresses IP, vous pouvez essayer de les interroger tous pour vérifier si elles répondre à des requêtes HTTP sur le$_SERVER['SERVER_PORT']
. Aussi, vous pouvez mettre un/ping.php
fichier avec une sorte deecho "my application";
pour déterminer votre adresse IP si la machine tourne plusieurs serveurs HTTP sur des adresses IP différentes.Eh bien, je serais de la troisième partie. Mais le PHP doit être capable de faire
exec()
et utiliser différents d'analyse algorythms, selon les OS -ipconfig -a
pour windows,ifconfig -l
pour unix, etc.OriginalL'auteur Ilya Sheershoff
Je suis assez sûr que ce n'est pas possible. Ou si c'est possible, les résultats ne seront pas fiables.
Un serveur peut avoir plusieurs adresses IP. Aussi, l'adresse IP utilisée pour le protocole HTTP sur le serveur peut ne pas être celle qui est utilisée pour atteindre le serveur d'ailleurs (si il y a un proxy inverse ou NAT). Le SERVER_ADDR variable indique l'adresse IP qui a été utilisé pour appeler un script PHP; cette information est transmise à partir du serveur web, il n'est donc pas de l'aide pour un script PHP qui exécute autonome (c'est à dire à partir d'un shell).
Regardons cela d'une autre manière. Quel problème essayez-vous de résoudre? C'est, pourquoi avez-vous besoin de l'adresse IP locale du serveur? Plutôt que de m'aider à la mise en œuvre d'une solution qui ne fonctionne pas, regardons le problème d'origine et voir si il y a une autre solution EST possible.
Je me dois de souligner que, selon votre système d'exploitation, il peut être possible d'obtenir une liste d'adresses ip attribuées à différentes interfaces, par l'analyse de la sortie d'une commande shell comme
ifconfig -a
ouip addr
. Mais je ne sais pas votre OS, donc je peux pas dire comment cela pourrait fonctionner pour vous.Vous pourriez mettre plus de logique dans le PHP pour éviter d'utiliser
awk
dans un tuyau, mais vous obtenez l'idée.Bon, eh bien, si vous ne savez même pas quel système d'exploitation gens seront en cours d'exécution de votre application, ou si le SAFE MODE est activé, un outil shell ne va pas aider avec ceci. Comme je l'ai dit, si vous pouvez décrire le problème que vous essayez de résoudre plutôt que de la solution que vous venez, nous pouvons aider à résoudre ce problème plutôt que de les aider à mettre en œuvre votre solution.
Veuillez voir mon montage dans la question. Merci
OriginalL'auteur ghoti
Si vous souhaitez obtenir Lan Adresse IP Comme
192.168.x.x
Vous pouvez utiliser le code suivant:Je suis en utilisant ce et répond à mon exigence de la perfection. (testé uniquement en machine windows)
Espère que cette aide. =)
ipconfig
est Windows uniquement. Pas très utile.OriginalL'auteur AlphaMale
Vous pouvez voir toutes les informations disponibles avec la commande:
OriginalL'auteur Schiavini
Essayer :
<?php gethostbyname($_SERVER['SERVER_NAME']);
EDIT :
Très orthodoxe, mais il semble fonctionner :
Mais cela compter sur un troisième site web..
Essayé de modifier votre trop. Mais il est ip externe du serveur. Ce dont j'ai besoin est le ip du serveur. Merci
OriginalL'auteur Adrien Schuler
Essayez d'utiliser la commande "ifconfig en1 inet de la Commande".
print_r(exec("ifconfig en1 inet"));
De sortie:-
inet 192.168.. netmask 0xffffff00 diffusion 192.168.*.255
OriginalL'auteur Dipesh