php屏蔽一些地区,屏蔽中国地区ip的方法

屏蔽中国地区ip的方法

2018-09-11

namespace ip;

use think\Request;

class Shielded{

public function doGet($url){

//初始化

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);

// 执行后不直接打印出来

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_HEADER, false);

// 跳过证书检查

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

// 不从证书中检查SSL加密算法是否存在

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

//执行并获取HTML文档内容

$output = curl_exec($ch);

//释放curl句柄

curl_close($ch);

return $output;

}

/**

* [is_china 通过自动获取ip,再判断ip是否是中国的]

* @Author    lmkj

* @DateTime  2018-09-04

* @copyright [lmkj]

* @license   [lmkj]

* @version   [version]

* @return boolean [返回code和msg]

*/

public function is_china(){

//获取ip

$ip = request()->ip();

if (!$ip) {

return ["code" => 0, "msg" => "获取不到ip"];

}

//通过ip检测是不是中国的

$taobao_param["ip"] = $ip;

$taobao_ip = $this->doGet("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);

$taobao_ip=json_decode($taobao_ip,true);

// dump($taobao_ip);

if ($taobao_ip["code"] == 0) {

if ($taobao_ip["data"]["country"] == "中国") {

return ["code" => 1, "msg" => "ip是中国的!"];

}else{

return ["code" => 0, "msg" => "ip是不是中国或者为未查询到"];

}

}else{

return ["code" => 0, "msg" => "查询失败"];

}

}

}

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。

http://www.pinlue.com/style/images/nopic.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
纯真IP数据库是一个常用的IP地理位置查询工具,用于根据IP地址查询对应的地区名。该数据库由纯真网络发布,包含了大量的IP地址段及其对应的地理位置信息。使用PHP编程语言可以通过以下步骤来查询IP地址对应的地区名: 1. 首先,需要将纯真IP数据库文件(通常是QQWry.dat)下载并存储在服务器上。 2. 使用PHP的文件操作函数(例如fopen和fread)来打开并读取数据库文件,获取其中的内容。 3. 解析读取到的数据库内容,根据IP地址对应的起始和结束位置,使用二分查找等算法来确定目标IP地址所在的位置。 4. 根据确定的位置,提取出对应的地区名信息。 以下是一个简单的示例代码,实现了根据IP地址查询地区名的功能: ```php <?php function searchRegion($ip) { $path = 'QQWry.dat'; $fp = fopen($path, 'rb'); $content = fread($fp, filesize($path)); $start = unpack('V', $content[0] . $content[1] . $content[2] . $content[3])[1]; $end = unpack('V', $content[4] . $content[5] . $content[6] . $content[7])[1]; $ip = pack('N', intval(ip2long($ip))); while ($start <= $end) { $mid = floor(($start + $end) / 2); fseek($fp, $mid * 7); $data = fread($fp, 7); $ipStart = implode('.', array_map('ord', str_split(substr($data, 0, 4)))); if ($ip < $ipStart) { $end = $mid - 1; } else { $offset = unpack('V', substr($data, 4, 3) . chr(0))[1]; if ($offset == 0) { return '未知地区'; } fseek($fp, $offset); $data = fread($fp, 4); if (substr($data, 0, 1) == chr(0x01)) { $offset = unpack('V', substr($data, 1, 3))[1]; fseek($fp, $offset); $data = fread($fp, 3); } return iconv('gbk', 'utf-8', $data); } } return '未知地区'; } ``` 以上代码使用了二分查找算法,在纯真IP数据库中查找目标IP地址所在位置,并返回对应的地区名(使用了GBK到UTF-8的字符编码转换)。当查询的IP地址在数据库中不存在时,将返回"未知地区"。 希望以上解答可以帮助到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值