diff --git a/.gitignore b/.gitignore index 0307853..876199e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ .env /tests/tmp /tests/.phpunit.result.cache +/lib diff --git a/app/controller/Index.php b/app/controller/Index.php index 6002975..0d813d0 100644 --- a/app/controller/Index.php +++ b/app/controller/Index.php @@ -11,7 +11,9 @@ class Index { $ip = $request->getRealIp(); - $location = IpLocation::getLocation($ip); + $filepath = '/usr/src/myapp/lib/qqwry.dat'; + + $location = IpLocation::getLocation($ip, $filepath); return json(['ip' => $ip, 'location' => $location]); } diff --git a/script/update-ip.php b/script/update-ip.php new file mode 100644 index 0000000..dbfa689 --- /dev/null +++ b/script/update-ip.php @@ -0,0 +1,109 @@ + false, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 600, + CURLOPT_CUSTOMREQUEST => "GET", + CURLOPT_HTTPHEADER => $header, + CURLOPT_URL => $url, + )); + $res = curl_exec($curl); + + if (curl_errno($curl)) { + error_log("curl error " . curl_errno($curl) . ' ' . curl_error($curl)); + } + + curl_close($curl); + return $res; +} + +//可设置为服务器特定目录,单独,避免组件升级互相影响 +$dir = dirname(__DIR__) . "/src"; +$option = getopt("d::"); +if (isset($option['d'])) { + if (!is_readable($option['d'])) { + die("bad param, dir not readable " . $option['d']); + } + $dir = $option['d']; +} + +$stime = microtime(true); + +echo "开始准备更新数据库" . date("Y-m-d H:i:s"); +echo "\n"; + +$copywrite = curls_get("http://update.cz88.net/ip/copywrite.rar"); + +if (!$copywrite) { + $download_spend = $qqwry_time - $stime; + die("copywrite.rar 下载失败 " . sprintf("下载耗时%s", $download_spend)); +} + + +$qqwry = curls_get("https://update.cz88.net/ip/qqwry.rar"); +$qqwry_time = microtime(true); + +if (!$qqwry) { + $download_spend = $qqwry_time - $stime; + die("qqwry.rar 下载失败 " . sprintf("下载耗时%s", $download_spend)); +} + +$key = unpack("V6", $copywrite)[6]; +for ($i = 0; $i < 0x200; $i++) { + $key *= 0x805; + $key++; + $key = $key & 0xFF; + $qqwry[$i] = chr(ord($qqwry[$i]) ^ $key); +} +$qqwry = gzuncompress($qqwry); +$unzip_time = microtime(true); + +$download_spend = $qqwry_time - $stime; +$unzip_spend = $unzip_time - $qqwry_time; + +if (!$qqwry) { + die("gzip 解压缩失败 " . sprintf("下载耗时%s,解压耗时%s", $download_spend, $unzip_spend)); +} + +$tmp_file = $dir . '/' . 'qqwry.dat.bak'; +$online_file = $dir . '/' . 'qqwry.dat'; + +if (file_put_contents($tmp_file, $qqwry)) { + $put_time = microtime(true); + $put_spend = $put_time - $unzip_time; + copy($online_file, $online_file.'.online.bak'); + copy($tmp_file, $online_file); + + $copy_spend = microtime(true) - $put_time; + die("更新成功 " . sprintf("下载耗时%s,解压耗时%s,写入耗时%s,复制耗时%s", $download_spend, $unzip_spend, $put_spend, $copy_spend)); +} else { + die("更新失败 " . sprintf("下载耗时%s,解压耗时%s", $download_spend, $unzip_spend)); +} \ No newline at end of file diff --git a/script/update-region-code.php b/script/update-region-code.php new file mode 100644 index 0000000..aad3b86 --- /dev/null +++ b/script/update-region-code.php @@ -0,0 +1,30 @@ +