php--ip的处理
1、获取ip
/**获取请求ip**/
function _get_request_ip(){
//strcasecmp 比较两个字符,不区分大小写。返回0,>0,<0。
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
$res = preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
return $res;
}
2、判断是否国内ip
/**
* 使用淘宝接口 判断ip
* @param $ip
* @return bool
*/
function judgeIpByTaobao($ip)
{
$url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
$res = file_get_contents($url);
if (!empty($res)) {
$ipData = json_decode($res,true);
if ($ipData['code']==0 && in_array($ipData['data']['country_id'],['CN','HK','TW'])) {
return true;
}
}
return false;
}
3、怎么“越级”获取ip
当我们的服务器的接口需要获取终端ip,而对接我们的接口的是一个平台,我们采用方法1获取ip,只能获取到平台的ip。
解决方法:
方法1:接口是否form表单提交,这里我们采用方法1就能获取用户的ip (接口是真实处理的请求参数)
方法2:下游使用接口的方式,如curl或flie_get_contents()等方法,我们先将请求的参数在假接口(负责转发请求参数,以form表单的方式再提交到正式处理的接口)转发真处理
这两种方法,下游平台不能继续执行代码逻辑。需要我们异步回调给下游平台
方法3:下游平台获取用户ip,以参数的形式提交
php--ip的处理的更多相关文章
- Tcp/ip 报文解析
在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...
- 网站定位之---根据IP获得区域
记得以前做一个培训机构网站时候需要定位,那时候用的搜狐的api,不是很精准. demo:https://github.com/dunitian/LoTCodeBase/tree/master/NetC ...
- 通过 floating IP 访问 VIP - 每天5分钟玩转 OpenStack(126)
前面我们是直接用 curl 测试 VIP,在更为真实的场景中通常会使用 floating IP 访问 VIP. 下面我们给 VIP 关联一个 floating IP,再进行测试. 访问 Project ...
- PHP获取客户端IP
/** * 获取客户端IP */ function getClientIp() { $ip = 'unknown'; $unknown = 'unknown'; if (isset($_SERVER[ ...
- 获取 dhcp IP 过程分析 - 每天5分钟玩转 OpenStack(91)
前面我们已经讨论了 DHCP agent 的配置以及 namespace 如何隔离 dnsmasq 服务,本节将以 cirros-vm1 为例分析获取 DHCP IP 的详细过程. 在创建 insta ...
- Java获取本机的IP与MAC地址
有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: // 获取mac地址 public static String getMacAddress() { try { Enumer ...
- 根据ip判断返回城市名称查询当地天气
<?phpheader("content-type:text/html;charset=utf-8");date_default_timezone_set("Asi ...
- TCP/IP基础
TCP/IP 是用于因特网 (Internet) 的通信协议. 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述. 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的 ...
- CentOS:ECDSA host key "ip地址" for has changed and you have requested strict checking(转)
原文地址:http://blog.csdn.net/ausboyue/article/details/52775281 Linux SSH命令错误:ECDSA host key "ip地址& ...
- TCP/IP之TCP_NODELAY与TCP_CORK
TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...
随机推荐
- 求素数的一个快速算法 Python 快速输出素数算法
思想 以100以内为例. 生成一个全是True的101大小的数组 2开始,遇到2的倍数(4,6,8,10...)都赋值为False 因为这些数字都有因子 2 3开始,遇到3的倍数(6,9,12...) ...
- Java static 静态代码块、代码块
简述 static{} 静态代码块,加载类之前执行 {} 代码块,每次new的时候都会被执行 示例 类: public class Student { int age; String name; bo ...
- React 渲染嵌套对象,内部对象会是undefined
在编译器中获取数据 发现报错 原因: render()一加载就会渲染,渲染的数据是初始state里的值 ,当setState会再次渲染 解决方法 1.三元运算 判断对象是否存在 2.在初始化对象的时候 ...
- HttpClient apache上篇
1.什么是HttpClient Http 是Hyper-Text Transfer Protocol简写,迄今为止互联网应用最广泛的协议.网络服务.互联网应用.网络计算需求的增长,持续推动http协议 ...
- Django专题-Cookie
Cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响, ...
- iOS 加急审核的办法
前言:由于自己的APP在提交后,审核了大概一周左右还没有消息,而领导又不断询问情况,于是自己在网上看到了这篇文章.由于自己比较懒,所以在此记录下来,以供 大家参考. 说明:本文只是做一个记录,还望看到 ...
- LeetCode——542. 01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 ...
- CPA-计划
平时周一到周五上班晚上8点到12点,周末6-8个小时,然后没有节假日,一次差不多可以3.4科 审计 看150页 3小时,看完,做题 2天时间,5门课程,12小时考试,没想到能完整地挺过来.感觉税法战 ...
- C++ malloc()函数的注意点及使用示例
1.malloc()函数的头文件是stdlib.h,其函数声明如下: void* malloc(size_t size); 其中参数size_t size表示动态内存分配空间的大小,以字节为单位. s ...
- 二分查找(python)
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/4/29 9:11 # @Author : Jackendoff # @Sit ...