Mis à part l'évidence (localhost, 127.0.0.1) PHP (interface en ligne de commande!) Dispose-t-il d'un mécanisme pour découvrir l'IP de l'ordinateur sur lequel le script s'exécute?
$_SERVER[*]
ne fonctionnera pas car il ne s'agit pas d'une application Web - il s'agit d'un script de ligne de commande.
TIA
Vous pouvez obtenir le nom d'hôte en utilisant gethostname
essayez cela, il devrait retourner l'adresse IP du serveur
$Host= gethostname();
$ip = gethostbyname($Host);
Si vous travaillez avec PHP <5.3, cela peut aider (sur les systèmes basés sur * NIX au moins):
mscharley@S04:~$ cat test.php
#!/usr/bin/env php
<?php
function getIPs($withV6 = true) {
preg_match_all('/inet'.($withV6 ? '6?' : '').' addr: ?([^ ]+)/', `ifconfig`, $ips);
return $ips[1];
}
$ips = getIPs();
var_dump($ips);
mscharley@S04:~$ ./test.php
array(5) {
[0]=>
string(13) "72.67.113.141"
[1]=>
string(27) "fe80::21c:c0ff:fe4a:d09d/64"
[2]=>
string(13) "72.67.113.140"
[3]=>
string(9) "127.0.0.1"
[4]=>
string(7) "::1/128"
}
mscharley@S04:~$
Ou, si vous ne prévoyez pas de le faire souvent, alors peut-être que cela fonctionnerait (ne l'abusez pas):
$ip = file_get_contents('http://whatismyip.org/');
Je sais que c'est une question assez ancienne, mais il ne semble pas y avoir de réponse définitive (dans la mesure du possible.) J'ai eu besoin de déterminer cette valeur, à la fois sur les boîtes * NIX et sur Win X des boites. Également à partir d'un script exécuté par CLI ainsi que d'un script non-CLI. La fonction suivante est la meilleure que j'ai trouvée, qui emprunte à différents concepts dont les gens ont parlé au fil des ans. Peut-être que cela peut être utile:
function getServerAddress() {
if(isset($_SERVER["SERVER_ADDR"]))
return $_SERVER["SERVER_ADDR"];
else {
// Running CLI
if(stristr(PHP_OS, 'WIN')) {
// Rather hacky way to handle windows servers
exec('ipconfig /all', $catch);
foreach($catch as $line) {
if(eregi('IP Address', $line)) {
// Have seen exec return "multi-line" content, so another hack.
if(count($lineCount = split(':', $line)) == 1) {
list($t, $ip) = split(':', $line);
$ip = trim($ip);
} else {
$parts = explode('IP Address', $line);
$parts = explode('Subnet Mask', $parts[1]);
$parts = explode(': ', $parts[0]);
$ip = trim($parts[1]);
}
if(ip2long($ip > 0)) {
echo 'IP is '.$ip."\n";
return $ip;
} else
; // TODO: Handle this failure condition.
}
}
} else {
$ifconfig = Shell_exec('/sbin/ifconfig eth0');
preg_match('/addr:([\d\.]+)/', $ifconfig, $match);
return $match[1];
}
}
}
Si tout le reste échoue, vous pouvez toujours exec ipconfig ou ifconfig, selon votre plate-forme, et analyser le résultat.