<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ~~~ <?php /** * Created by PhpStorm. * Date: 2021-12-10 * Time: 9:24:59 * Info: 根據ip解析為地區-【省市】 * Desc: 1、優先使用純真ip庫;2、1失敗使用太平洋ip庫解析;3、2失敗使用百度ip庫解析 */ namespace lib; class IpAddress { /** * ip地址轉換為地區名 */ public function ipToAddress($clientIP = '') { //優先使用純真ip庫解析 $address = $this->convertIp($clientIP); if ( ! is_array($address)) { $returnAddress['province'] = ''; $returnAddress['city'] = ''; $returnAddress['city'] = ''; $returnAddress['type'] = 'ct'; } else { $returnAddress = $address; $returnAddress['type'] = 'ct'; if (empty($returnAddress['province']) || empty($returnAddress['city'])) { //使用太平洋ip庫解析 $returnAddress = $this->modifyAddressPconline($clientIP); $returnAddress['type'] = 'pconline'; if (empty($returnAddress['province']) || empty($returnAddress['city'])) { //如果太平洋解析失敗,使用百度ip庫解析 $returnAddress = $this->modifyAddressBaidu($clientIP); $returnAddress['type'] = 'baidu'; } else { return $returnAddress; } } } return $returnAddress; } /** * 根據IP獲取請求地區(太平洋IP庫) * * @param $ip * * @return 所在位置 */ private function modifyAddressPconline($ip) { $result = ['province' => '', 'city' => '']; //sleep(6);// 10次并發 $content = @file_get_contents('http://whois.pconline.com.cn/ipJson.jsp?ip='.$ip.'&json=true'); $content = iconv('GB2312', 'UTF-8', $content); $arr = json_decode($content, true); if (is_array($arr) && $arr['regionCode'] == 0) { $result['province'] = $arr['pro']; $result['city'] = $arr['city']; } return $result; } /** * 使用百度接口api獲取地區 * 返回省市的數組 * * @param $ip * * @return false|string[] */ private function modifyAddressBaidu($ip) { $result = ['province' => '', 'city' => '']; $ak = 'aaaaaaaaaaaaaaaaaaaaaaa'; //sleep(6);// 10次并發 $url = 'http://api.map.baidu.com/location/ip?ak='.$ak.'&ip='.$ip.'&coor=bd09ll'; //HTTP協議 $curl_result = cmf_curl_get($url); $return = json_decode($curl_result, true); if ( ! is_array($return) || ! isset($return['status']) || $return['status'] != 0) { return $result; } $result['province'] = $return['content']['address_detail']['province']; $result['city'] = $return['content']['address_detail']['city']; return $result; } /** * 分割純真ip庫解析出來的地址 * * @param $address */ private function formatAddress($address) { $result = ['province' => '', 'city' => '']; if (empty($address)) { return $result; } if (preg_match("/(省)/", $address, $match)) { if (empty($match)) { $result['province'] = $address; return $result; } $address_arr = explode($match[0], $address); $city = explode(" ", $address_arr[1]); $result['province'] = $address_arr[0].'省'; $result['city'] = $city[0]; } elseif (preg_match("/(自治區)/", $address, $match)) { if (empty($match)) { $result['province'] = $address; return $result; } $address_arr = explode($match[0], $address); $city = explode(" ", $address_arr[1]); $result['province'] = $address_arr[0].'自治區'; $result['city'] = $city[0]; } elseif (preg_match("/市/", $address, $match)) { if (empty($match)) { $result['province'] = $address; return $result; } $address_arr = explode($match[0], $address); $result['province'] = $address_arr[0].'市'; $result['city'] = $address_arr[0].'市'; } elseif ($address != '中國') { $arr = ['廣西', '內蒙古', '寧夏', '西藏', '新疆']; foreach ($arr as $name) { if ($name == $address) { $result['province'] = $name; return $result; } if (mb_strpos($address, $name) === false) { continue; } $result['city'] = str_replace($name, '', $address); $result['province'] = $name; } } else { $result['province'] = $address; } return $result; } /** * 純真數據庫調用函數(需要下載純真數據庫文件) * * @param $ip * * @return false|string */ private function convertIp($ip) { $ip1num = 0; $ip2num = 0; $ipAddr1 = ""; $ipAddr2 = ""; $dat_path = './qqwry.dat'; //純真數據庫文件位置 if ( ! preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) { return 'IP Address Error'; } if ( ! $fd = @fopen($dat_path, 'rb')) { return 'IP date file not exists or access denied'; } $ip = explode('.', $ip); $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3]; $DataBegin = fread($fd, 4); $DataEnd = fread($fd, 4); $ipbegin = implode('', unpack('L', $DataBegin)); if ($ipbegin < 0) { $ipbegin += pow(2, 32); } $ipend = implode('', unpack('L', $DataEnd)); if ($ipend < 0) { $ipend += pow(2, 32); } $ipAllNum = ($ipend - $ipbegin) / 7 + 1; $BeginNum = 0; $EndNum = $ipAllNum; while ($ip1num > $ipNum || $ip2num < $ipNum) { $Middle = intval(($EndNum + $BeginNum) / 2); fseek($fd, $ipbegin + 7 * $Middle); $ipData1 = fread($fd, 4); if (strlen($ipData1) < 4) { fclose($fd); return 'System Error'; } $ip1num = implode('', unpack('L', $ipData1)); if ($ip1num < 0) { $ip1num += pow(2, 32); } if ($ip1num > $ipNum) { $EndNum = $Middle; continue; } $DataSeek = fread($fd, 3); if (strlen($DataSeek) < 3) { fclose($fd); return 'System Error'; } $DataSeek = implode('', unpack('L', $DataSeek.chr(0))); fseek($fd, $DataSeek); $ipData2 = fread($fd, 4); if (strlen($ipData2) < 4) { fclose($fd); return 'System Error'; } $ip2num = implode('', unpack('L', $ipData2)); if ($ip2num < 0) { $ip2num += pow(2, 32); } if ($ip2num < $ipNum) { if ($Middle == $BeginNum) { fclose($fd); return 'Unknown'; } $BeginNum = $Middle; } } $ipFlag = fread($fd, 1); if ($ipFlag == chr(1)) { $ipSeek = fread($fd, 3); if (strlen($ipSeek) < 3) { fclose($fd); return 'System Error'; } $ipSeek = implode('', unpack('L', $ipSeek.chr(0))); fseek($fd, $ipSeek); $ipFlag = fread($fd, 1); } if ($ipFlag == chr(2)) { $AddrSeek = fread($fd, 3); if (strlen($AddrSeek) < 3) { fclose($fd); return 'System Error'; } $ipFlag = fread($fd, 1); if ($ipFlag == chr(2)) { $AddrSeek2 = fread($fd, 3); if (strlen($AddrSeek2) < 3) { fclose($fd); return 'System Error'; } $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); fseek($fd, $AddrSeek2); } else { fseek($fd, -1, SEEK_CUR); } while (($char = fread($fd, 1)) != chr(0)) { $ipAddr2 .= $char; } $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0))); fseek($fd, $AddrSeek); while (($char = fread($fd, 1)) != chr(0)) { $ipAddr1 .= $char; } } else { fseek($fd, -1, SEEK_CUR); while (($char = fread($fd, 1)) != chr(0)) { $ipAddr1 .= $char; } $ipFlag = fread($fd, 1); if ($ipFlag == chr(2)) { $AddrSeek2 = fread($fd, 3); if (strlen($AddrSeek2) < 3) { fclose($fd); return 'System Error'; } $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); fseek($fd, $AddrSeek2); } else { fseek($fd, -1, SEEK_CUR); } while (($char = fread($fd, 1)) != chr(0)) { $ipAddr2 .= $char; } } fclose($fd); if (preg_match('/http/i', $ipAddr2)) { $ipAddr2 = ''; } $ipaddr = "$ipAddr1 $ipAddr2"; $ipaddr = preg_replace('/CZ88.NET/is', '', $ipaddr); $ipaddr = preg_replace('/^s*/is', '', $ipaddr); $ipaddr = preg_replace('/s*$/is', '', $ipaddr); if (preg_match('/http/i', $ipaddr) || $ipaddr == '') { $ipaddr = 'Unknown'; } //編碼轉換 $ipaddr = iconv('gbk', 'utf-8//IGNORE', $ipaddr); $return = $this->formatAddress($ipaddr); return $return; } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看