123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- namespace app\service;
- use app\service\ConfServiceFacade;
- use laytp\traits\Error;
- use think\facade\Cache;
- use think\facade\Config;
- use think\facade\Request;
- use EasyWeChat\Factory;
- use think\facade\Db;
- class Ip
- {
- use Error;
- /**
- * phpmailer对象
- */
- protected $conf;
- /**
- * 构造函数
- */
- public function __construct()
- {
- // $conf = ConfServiceFacade::groupGet('system.ai');
- }
- /**
- * 初始化
- * @param $token
- * @return bool
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function getIp()
- {
- $ip = $this->getRealIp();
- $data=[];
- $res= $this->httpPostAli($ip);
- if(!$res){
- $res = $this->httpPost($ip);
- $res2 = json_decode($res,true);
- if(empty($res2) || $res2['code']!=200){
- return false;
- }
- $data['city_name'] = $res2['ipdata']['info2'];
- $data['city_code'] = $res2['adcode']['a'];
- return $data;
- }
- $res2 = json_decode($res,true);
- if($res2['code'] != 200){
- return false;
- }
- $data['city_name'] = $res2['data']['result']['city'];
- $data['city_code'] = $res2['data']['result']['adcode'];
- return $data;
- }
- protected function httpPost($ip)
- {
- $host = "https://api.vore.top";
- $path = "/api/IPdata";
- $method = "GET";
- $headers = array();
- $querys = "ip=".$ip;
- $bodys = "";
- $url = $host . $path . "?" . $querys;
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
- curl_setopt($curl, CURLOPT_FAILONERROR, false);
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
- //设定返回信息中是否包含响应信息头,启用时会将头文件的信息作为数据流输出,true 表示输出信息头, false表示不输出信息头
- //如果需要将字符串转成json,请将 CURLOPT_HEADER 设置成 false
- curl_setopt($curl, CURLOPT_HEADER, false);
- if (1 == strpos("$".$host, "https://"))
- {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
- }
- return curl_exec($curl);
- }
- protected function httpPostAli($ip)
- {
- $host = "https://ipcity.market.alicloudapi.com";
- $path = "/ip/city/query";
- $method = "GET";
- $appcode = ALI_MARKET_CODE;
- $headers = array();
- array_push($headers, "Authorization:APPCODE " . $appcode);
- $querys = "coordsys=coordsys&ip=".$ip;
- $bodys = "";
- $url = $host . $path . "?" . $querys;
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
- curl_setopt($curl, CURLOPT_FAILONERROR, false);
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
- //设定返回信息中是否包含响应信息头,启用时会将头文件的信息作为数据流输出,true 表示输出信息头, false表示不输出信息头
- //如果需要将字符串转成json,请将 CURLOPT_HEADER 设置成 false
- curl_setopt($curl, CURLOPT_HEADER, false);
- if (1 == strpos("$".$host, "https://"))
- {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
- }
- return curl_exec($curl);
- }
- protected function getRealIp(){
- $ip=FALSE;
- //客户端IP 或 NONE
- if(!empty($_SERVER["HTTP_CLIENT_IP"])){
- $ip = $_SERVER["HTTP_CLIENT_IP"];
- }
- //多重代理服务器下的客户端真实IP地址(可能伪造),如果没有使用代理,此字段为空
- if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
- $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
- if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
- for ($i = 0; $i < count($ips); $i++) {
- if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
- $ip = $ips[$i];
- break;
- }
- }
- }
- //客户端IP 或 (最后一个)代理服务器 IP
- return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
- }
- }
|