PHP如何获得系统的本地IP

我需要得到192的计算机的本地IP。* ….这是可能的PHP?

我需要系统运行脚本的IP地址,但是我不需要外部IP,我需要他的本地网卡地址。

从CLI

PHP <5.3.0

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

PHP> = 5.3.0

$localIP = getHostByName(getHostName());

 $_SERVER['SERVER_ADDR'] 

试试这个(如果你的服务器是Linux的话):

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

这是一个旧的post,但是可以这样做:

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

例如:

 die( getLocalIp() ); 

发现它在另一个网站上,不要删除修剪命令,否则你会得到计算机的名称。

BACKTICKS(特殊引号):因为PHP会试图在这些“特殊引号”(反引号)之间运行一个shell命令并返回结果输出。

 gethostbyname(trim(`hostname`)); 

是非常相似(但更有效率)比做:

 $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 

取决于你本地的意思:

如果通过本地来表示执行PHP代码的服务器/系统的地址,那么还有两个途径可以讨论。 如果PHP正在通过Web服务器运行,则可以通过读取$_SERVER['SERVER_ADDR']来获取服务器地址。 如果PHP正在通过命令行界面运行,那么您可能必须执行ipconfig (Windows)/ ifconfig (* nix)并将地址清除。

如果通过本地你的意思是网站访问者的远程地址,而不是他们的外部IP地址(因为你明确地说过192. *),那么你是不走运的。 NAT路由的要点就是隐藏这个地址。 您不能识别IP地址后面的单个计算机的本地地址,但是有一些技巧(用户代理,可能是MAC地址)可以帮助区分是否有多台计算机从同一个IP访问。

本地机器的默认IP地址可以这样获得:

 $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 $localAddr = $name; 

由于这是UDP,因此socket_connect不会在networking上出现。 它只分配一个本地地址和端口到套接字。 这使我们能够获得本地地址。

此解决scheme在没有任何networkingstream量,DNS或命令执行的情况下工作。

如果没有到8.8.8.8路由(例如,你没有互联网连接),它可能不起作用。

hostname(1)可以告诉IP地址: hostname --ip-address ,或者像man说的那样,最好使用hostname --all-ip-addresses

您可以在Linux主机上的CLI中以普通用户身份尝试此操作:

 function get_local_ipv4() { $out = split(PHP_EOL,shell_exec("/sbin/ifconfig")); $local_addrs = array(); $ifname = 'unknown'; foreach($out as $str) { $matches = array(); if(preg_match('/^([a-z0-9]+)(:\d{1,2})?(\s)+Link/',$str,$matches)) { $ifname = $matches[1]; if(strlen($matches[2])>0) { $ifname .= $matches[2]; } } elseif(preg_match('/inet addr:((?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3})\s/',$str,$matches)) { $local_addrs[$ifname] = $matches[1]; } } return $local_addrs; } $addrs = get_local_ipv4(); var_export($addrs); 

输出:

 array ( 'eth0' => '192.168.1.1', 'eth0:0' => '192.168.2.1', 'lo' => '127.0.0.1', 'vboxnet0' => '192.168.56.1', ) 

我摆弄这个问题的服务器端PHP(从Linuxterminal运行)

我爆炸了'ifconfig'并将其缩小到192.168.xx的IP地址。

这里是:

 echo explode(' ',explode(':',explode('inet addr',explode('wlan0',trim(`ifconfig`))[1])[1])[1])[0]; 

当然,将“wlan0”更改为所需的networking设备。

我的输出是:

 192.168.1.5 

$ localIP = gethostbyname(trim(exec(“hostname”)));

我试图在Windows PC和它的工作,也认为将在Linux上工作。

如果您在OS X的开发环境中,通过Wifi连接:

 echo exec("/sbin/ifconfig en1 | grep 'inet ' | cut -d ' ' -f2"); 
 $_SERVER['REMOTE_ADDR'] 
  • PHP_SELF用相对于根的path返回当前脚本的文件名

  • SERVER_PROTOCOL返回页面请求协议的名称和修订版本

  • REQUEST_METHOD返回用于访问页面的请求方法

  • DOCUMENT_ROOT返回当前脚本执行的根目录

尝试这个

 $localIP = gethostbyname(trim('hostname')); 

使用$_SERVER['SERVER_ADDR']获取本地IP地址的最简单方法

例如。 –

 $ip_address = $_SERVER['SERVER_ADDR'] 

PHP显示服务器的IP地址