113 votes

PHP comment obtenir l'IP locale du système

Je dois obtenir l'adresse IP locale de l'ordinateur, par exemple 192.*..... Est-ce possible avec PHP ?

J'ai besoin de l'adresse IP du système qui exécute le script, mais je n'ai pas besoin de l'IP externe, j'ai besoin de l'adresse de sa carte réseau locale.

130voto

andras.tim Points 301

Depuis l'interface CLI

PHP < 5.3.0

$localIP = getHostByName(php_uname('n'));

PHP >= 5.3.0

$localIP = getHostByName(getHostName());

65voto

Sergey Eremin Points 6237
$_SERVER['SERVER_ADDR']

36voto

Erwinus Points 1587

Il s'agit d'un vieux poste, mais comprenez-le :

function getLocalIp()
{ return gethostbyname(trim(`hostname`)); }

Par exemple :

die( getLocalIp() );

Je l'ai trouvé sur un autre site, ne supprimez pas la commande trim car sinon vous obtiendrez le nom des ordinateurs.

BACKTICKS (Les guillemets spéciaux) : Cela fonctionne parce que PHP essaiera d'exécuter ce qui se trouve entre ces "guillemets spéciaux" (backticks) comme une commande shell et retournera la sortie résultante.

gethostbyname(trim(`hostname`));

C'est très similaire (mais beaucoup plus efficace) que de faire :

$exec = exec("hostname"); //the "hostname" is a valid command in both windows and linux
$hostname = trim($exec); //remove any spaces before and after
$ip = gethostbyname($hostname); //resolves the hostname using local hosts resolver or DNS

35voto

arnaud576875 Points 35281

Un moyen fiable d'obtenir l'adresse IP externe de la machine locale serait d'interroger la table de routage, bien que nous n'ayons pas de moyen direct de le faire en PHP.

Cependant, nous pouvons faire en sorte que le système le fasse pour nous en liant un socket UDP à une adresse publique, et en obtenant son adresse :

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($sock, "8.8.8.8", 53);
socket_getsockname($sock, $name); // $name passed by reference

// This is the local machine's external IP address
$localAddr = $name;

socket_connect n'entraînera pas de trafic réseau car il s'agit d'un socket UDP.

23voto

George Deac Points 91

Essayez ceci (si votre serveur est Linux) :

$command="/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'";
$localIP = exec ($command);
echo $localIP;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X