2

我正在尝试从输入帖子发布的数据中处理数组 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);


}

此代码始终返回 null

4

1 回答 1

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);
    }
}
于 2017-08-08T04:56:33.107 回答