php 获取本机外网/公网IP的代码_php技巧

大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP,

但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。

经过我的研究有两种方法来获取用户的真实外网IP。

方法一:curl

复制代码 代码如下:

function get_onlineip() {
$ch = curl_init('http://www.ip138.com/ip2city.asp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch);
preg_match('/\[(.*)\]/', $a, $ip);
return $ip[1];
}

方法二:$_SERVER['HTTP_X_FORWARDED_FOR']来获取相应的地址

复制代码 代码如下:

function get_onlineip() {
$onlineip = '';
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$onlineip = $_SERVER['REMOTE_ADDR'];
}
return $onlineip;
}

时间: 2024-11-01 15:19:33

php 获取本机外网/公网IP的代码_php技巧的相关文章

php REMOTE_ADDR之获取访客IP的代码_php技巧

<?php $iipp=$_SERVER["REMOTE_ADDR"]; echo $iipp; ?>[/code][code]<?php $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $user_IP = ($user_IP) ? $user_IP : $_SER

php获取用户IPv4或IPv6地址的代码_php技巧

其实这个很简单,只不过我一直想用 ipv6-test 的API做一个获取用户IP地址的东西--无奈JSON获取到的只是本机服务器的IP.算了,不研究了,何况人家提供的widget也挺好用的.谷歌了一下,找到这段代码,可以根据用户环境获取IP地址. 例如IPv6访问 www.shiwo.de 则获取到的是用户的IPv6地址 p.s 前提是网站做了A和AAAA解析 复制代码 代码如下: <?php function getIP() /*获取客户端IP*/ { if (@$_SERVER["HT

PHP 显示客户端IP与服务器IP的代码_php技巧

来看看代码: 复制代码 代码如下: echo "(1)浏览当前页面的用户的 IP 地址为:"; echo $_SERVER['REMOTE_ADDR']; echo "<br />"; echo "(2)浏览当前页面的用户的 IP 地址为:"; echo getenv('REMOTE_ADDR'); echo "<br />"; echo "主机 www.baidu.com 的 IP 地址为:

用PHP获取Google AJAX Search API 数据的代码_php技巧

http://code.google.com/apis/ajaxsearch/documentation/ 复制代码 代码如下: // This example request includes an optional API key which you will need to // remove or replace with your own key. // Read more about why it's useful to have an API key. // The request

php 获取百度的热词数据的代码_php技巧

复制代码 代码如下: <?php /** * 获取百度的热词 * @user 小杰 * @from http://www.isharey.com/?p=354 * @return array 返回百度的热词数据(数组返回) */ function getBaiduHotKeyWord() { $templateRss = file_get_contents('http://top.baidu.com/rss_xml.php?p=top10'); If (preg_match('/<table&

PHP和JavaScrip分别获取关联数组的键值示例代码_php技巧

PHP版: 复制代码 代码如下: $o = array('x'=>1, 'y'=>2, 'z'=>3); $arr = array(); $i = 0; foreach( $o as $arr[$i++]=>$v )/*empty*/; var_dump($arr); //$arr = array('x', 'y', 'z'); JavaScrip版: 复制代码 代码如下: var o = {x:1, y:2, z:3}; var arr = [], i = 0; for ( ar

PHP获取MSN好友列表类的实现代码_php技巧

复制代码 代码如下: <?phperror_reporting(7);class msn{    private $startcomm = 0;    private $username = '';    private $password = '';    private $commend = '';    private $domain = '';    private $socket = '';    private $challenge = '';    private $status

PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码_php技巧

复制代码 代码如下: $command = '/usr/bin/php /pub/www/u111/job/Crondo/auto_collector.php &'; $process = proc_open($command, array(),$pipes); $var = proc_get_status($process); proc_close($process); //pid就是进程ID,至于为什么要加1,我现在也没有搞懂,经过多次的测试,发现$var['pid']得到的ID比实际的少1

网络编程-我想通过软件,获取本机外网ip地址,然发送给web服务器跳转,类似花生壳

问题描述 我想通过软件,获取本机外网ip地址,然发送给web服务器跳转,类似花生壳 我想通过写一个软件,每天开机的时候获取本机外网ip地址,然发送给web服务器做跳转,类似花生壳,这样其他人就可以通过访问web服务器,就可以跳转到我的ip对应的网站,这个请问要怎么实现呢,谢谢回答! 解决方案 外网地址必须借助外网服务器才能获取(当然你可以用现成的服务器,比如ip138),另外,开机的时候获取是不够的,因为ip变动并不和开机有关,你的dhcp租期到了,或者网络断开重连都会更换ip,最后,大陆电信运