试图将IP存储到数据库以限制外部请求...为什么有这么多的DB条目?

时间:2019-04-05 15:24:02

标签: php geoip

我正在使用第三方API服务从IP地址获取国家/地区代码,并限制了将国家/地区代码存储在本地数据库表中的请求数量,并首先对其进行了查找。如果该记录不存在,它将获取国家/地区代码并将其存储以用于下一次查找。

但是,在数据库表中查找时,我看到的IP地址和国家/地区代码行被添加了大约20次。

这是怎么回事?我正在阅读此书,但我不明白为什么它会对表增加几笔,这毫无意义。

这正在导致API服务大规模中断,他们告诉我们我们正在滥用其请求限制。有人可以帮忙吗?

function get_country_code() {


    // Check if site is local dev
    if(get_bloginfo('url') == '###') {

        global $wpdb;

        $ip         = $_SERVER['REMOTE_ADDR'];
        $access_key = '###';
        $record     = $wpdb->get_row("SELECT * FROM wp_geoip WHERE ip = '$ip'");

        if($record) {

            // Return stored country code
            return $record->country_code;

        } else {

            // Make request to ipapi and store country code into table
            $ch = curl_init('http://api.ipapi.com/'.$ip.'?access_key='.$access_key.'');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $json = curl_exec($ch);
            curl_close($ch);
            $api_result = json_decode($json, true);
            $wpdb->insert(
                'wp_geoip',
                array(
                    'ip'           => $ip,
                    'country_code' => $api_result['country_code']
                ),
                array(
                    '%s',
                    '%s'
                )
            );

            // Return country code
            return $api_result['country_code'];

        }

    } else {

        return 'GB';

    }

}

0 个答案:

没有答案