У меня есть таблица "users" со столбцами:
Id | user_id | name | ip_address | lat | lng | active
Столбцы широты (широты) и долготы (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-адресов?
Извините за количество кода, я стараюсь быть максимально понятным.