【发布时间】:2019-09-09 04:46:47
【问题描述】:
我有一个包含列的“用户”表:
Id | user_id | name | ip_address | lat | lng | active
纬度(lat)和经度(lng)列是空的,我需要用大概的位置填充它们(我不需要精确的位置)。使用这个论坛,在另一个问题中,我发现我必须分离 IP,并使用位置库。好吧。我创建了一个函数来提取 IP 并将 IP2Location 库添加到我的项目中。如果我以IP为IP,得到纬度和经度,并在MySQL中逐一添加它,但是我有125,000条记录,没有办法手动完成这项工作。 有人知道怎么做吗?
使用此功能
function List_ip() {
global $sqlConnect, $db;
if ($db['loggedin'] == false) {
return false;
}
$ips = mysqli_query($sqlConnect, "SELECT `user_id` , `ip_address` FROM " . T_USERS . " WHERE `active` = '1'");
while ($fetched_data = mysqli_fetch_assoc($ips)) {
$list_ip[] = array_map('utf8_encode', $fetched_data);
}
return $list_ip;
}
我有以下 json 结果
{
"api_status": 200,
"ips": [
{
"user_id": "1",
"ip_address": "177.198.86.7x"
},
{
"user_id": "21",
"ip_address": "177.18.246.9x"
},
{
"user_id": "52",
"ip_address": "177.36.60.1x"
}
]
}
我有这个脚本可以根据IP给我经纬度
<?php
require_once './assets/libraries/vendor/ip2location/ip2location-php/IP2Location.php';
$reader = new \IP2Location\Database('./IP2LOCATION-LITE-DB9.BIN', \IP2Location\Database::FILE_IO);
$records = $reader->lookup('8.8.8.8', \IP2Location\Database::ALL);
echo '<pre>';
echo 'IP Number : ' . $records['ipNumber'] . "\n";
echo 'Latitude : ' . $records['latitude'] . "\n";
echo 'Longitude : ' . $records['longitude'] . "\n";
?>
如何自动为每个 IP 插入经纬度数据?
抱歉代码量太大,我尽量说清楚。
【问题讨论】:
-
utf8_encode在数据库结果的上下文中?utf8_encode最好不要使用。你知道它的作用吗? -
您的表中已经有 ip 地址,但您想更新洞表以使其每行都有带有 LAT 和 LNG 的 ip 地址,对吗?
-
MAZux 是的,没错!
-
Dharman 我用它来将 ISO-8859-1 标准解码为 utf-8 标准。这样就可以在应用程序的其他部分使用某个拉丁标准字符串(我的用户是拉丁美洲的 90%)。在这个 API 中,我将来会使用用户名,这样使用 'àáâääåæçèéêëìíîïñòóôõøùùùûûýýÿ 的人的名字不会变成 ( ) 我将不得不使用它。我有什么理由不应该使用它吗?
-
不是从数据库中获取用户名和 ip,而是获取不同的 IP 地址。然后不是为每一行添加到数组中...调用您的 IP2Location 函数来获取值,然后在同一个循环中编写一个更新语句来更新 ip 是您获得的 ip 的表。