<?php
header('Content-Type:text/html;Charset=utf-8'); /**
* 获取IP地址
*
* @return string
*/
function get_ip() {
$realip = '';
$unknown = 'unknown';
if (isset($_SERVER)) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach ($arr as $ip) {
$ip = trim($ip);
if ($ip != 'unknown') {
$realip = $ip;
break;
}
}
} else if (isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], $unknown)) {
$realip = $_SERVER['HTTP_CLIENT_IP'];
} else if (isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)) {
$realip = $_SERVER['REMOTE_ADDR'];
} else {
$realip = $unknown;
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), $unknown)) {
$realip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), $unknown)) {
$realip = getenv("HTTP_CLIENT_IP");
} else if (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), $unknown)) {
$realip = getenv("REMOTE_ADDR");
} else {
$realip = $unknown;
}
}
$realip = preg_match("/[\d\.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown;
return $realip;
} /**
* 根据IP获取地址详情
*
* @param string $ip
* @return bool|mixed
*/
function get_ip_info($ip = '') {
if (empty($ip)) {
$ip = get_ip();
} $res = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip);
if (empty($res)) {
return false;
} $jsonMatches = array();
preg_match('#\{.+?\}#', $res, $jsonMatches);
if (!isset($jsonMatches[0])) {
return false;
} $json = json_decode($jsonMatches[0], true);
if (isset($json['ret']) && $json['ret'] == 1) {
$json['ip'] = $ip;
unset($json['ret']);
} else {
return false;
} return $json;
} $ipInfos = get_ip_info('123.125.114.144'); // baidu.com IP地址
print_r($ipInfos);

输出:

特别说明

使用 file_get_contents() 函数一定要加个超时时间设置,否则,网络差的时候会拖垮php-fpm进程!

参考:

http://blog.csdn.net/liruxing1715/article/details/28238483

最新文章

  1. warning C4996: &#39;sprintf&#39;: This function or variable may be unsafe
  2. 通过统计用户DNS解析记录,实现监控用户上网行为
  3. CentOS系统rsync文件同步 安装配置
  4. windows下scrapy 的安装
  5. Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制、break、continue【3】
  6. &lt;Linux系统hostname命令详解&gt;
  7. unix more命令
  8. The Painter&#39;s Partition Problem Part I
  9. JSP中使用cookie存储中文
  10. GraphLab介绍[转]
  11. R安装
  12. 【JVM命令系列】jstat
  13. 内网IP无法访问
  14. 集合框架之Queue接口
  15. Java-接口(interface)
  16. 【转】Android总结篇系列:Activity Intent Flags及Task相关属性
  17. 直接运行vue+django项目
  18. 性能测试五十:Jmeter+Influxdb+Grafana实时数据展示系统搭建
  19. UITableView 自定义多选
  20. B - Cube HDU - 1220 (数学计数)

热门文章

  1. 常见Android Native崩溃及错误原因
  2. linux系统性能监视命令
  3. BZOJ2960: 跨平面
  4. listen()
  5. mysql主从复制 转
  6. 脚本放在 &lt;body&gt; 元素的底部
  7. bs4_2
  8. C#验证子网掩码的正确性
  9. Java——不弹起的按钮组件:JToggleButton
  10. NGUI架构和Draw Call合并原理