Я не могу конвертировать IP в массиве в долготу и широту
Я пытаюсь обработать массив IP из данных, отправленных из входного сообщения. Чтобы преобразовать это в широту и долготу, я использую следующий код,
это моя библиотека CI:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
include APPPATH . 'libraries/GeoIP/src/geoipcity.inc';
class GeoIp{
public function info($ip){
$gi = geoip_open(APPPATH . 'libraries/GeoIp/data/GeoLiteCity.dat', GEOIP_STANDARD);
$record = geoip_record_by_addr($gi, $ip);
geoip_close($gi);
return $record;
}
public function get($ip){
$gi = geoip_open(APPPATH . 'libraries/GeoIp/data/GeoLiteCity.dat', GEOIP_STANDARD);
$records = array();
$ips = is_array($ip);
foreach ($ips as $key=>$value) {
$records[] = geoip_record_by_addr($gi, $value);
}
foreach ($records as $record) {
$record_string = $record->longitude . "," . $record->latitude;
geoip_close($gi);
return $record_string;
}
}
}
а это мой контроллер
public function iplat(){
$this->load->library('geoip');
$record = $this->geoip->get($this->input->post('ip'));
echo json_encode($record);
}
Этот код всегда возвращает ноль
1 ответ
Одна проблема, которую я вижу сразу, это твой код
$ips = is_array($ip);
foreach ($ips as $key=>$value) {
$records[] = geoip_record_by_addr($gi, $value);
}
Потому что вы назначили is_array($ip)
в $ips
, $ips
теперь логическое значение, а не массив. Таким образом, вы не можете запустить цикл на нем. Возможно, вы хотели запустить цикл $ip
как это:
if(is_array($id))
{
foreach ($ip as $key=>$value)
{
$records[] = geoip_record_by_addr($gi, $value);
}
}