Файл GeoLite2-Country.mmdb не существует или недоступен для чтения

Я нахожусь в небольшом проекте, где мне нужно собрать людей из стран, которые отправляют контактную форму на один сайт, теперь я использую MaxMind/GeoLite2, читая файл БД с помощью GeoIp2 v2.0 (установленный из composer), и получаю следующее сообщение об ошибке.

Файл GeoLite2-Country.mmdb не существует или недоступен для чтения.

Я использую CodeIgniter v3.1.6

Это полное сообщение об ошибке:

An uncaught Exception was encountered
Type: InvalidArgumentException

Message: The file "http://localhost/isite/assets/geoip2db/GeoLite2-Country.mmdb" does not exist or is not readable.

Filename: C:\xampp\htdocs\isite\vendor\maxmind-db\reader\src\MaxMind\Db\Reader.php

Line Number: 48

Backtrace:

File: C:\xampp\htdocs\isite\vendor\geoip2\geoip2\src\Database\Reader.php
Line: 53
Function: __construct

File: C:\xampp\htdocs\isite\application\controllers\Main.php
Line: 28
Function: __construct

File: C:\xampp\htdocs\isite\index.php
Line: 317
Function: require_once

Файл GeoLite2-Country.mmdb находится там.

Вот функция, где я вызываю класс GeoIp2:

public function contact_submit(){
$reader = new GeoIp2\Database\Reader(base_url().'assets/geoip2db/GeoLite2-Country.mmdb');
$record = $reader->country($_SERVER['REMOTE_ADDR']);
$data = array(
    'name' => $this->input->post('name'),
    'mail' => $this->input->post('mail'),
    'phone' => $this->input->post('phone'),
    'comment' => $this->input->post('comment'),
    'USER_AGENT' => $_SERVER['HTTP_USER_AGENT'],
    'ADDR' => $_SERVER['REMOTE_ADDR'],
    'PORT' => $_SERVER['REMOTE_PORT'],
    'ISO' => $record->country->isoCode,
    'COUNTRY_NAME' => $record->country->name,
    'COUNTRY_STATE' => $record->mostSpecificSubdivision->name,
    'COUNTRY_STATE_ISO' => $record->mostSpecificSubdivision->isoCode,
    'CITY_NAME' => $record->city->
    'POSTAL_CODE' => $record->postal->code,
    'LONGITUDE' => $record->location->longitude,
    'LATITUDE' => $record->location->latitude
);
if($this->MainModel->submitComment($data))
    redirect(base_url().'index.php/main/contact?statusMessage=1', 'location');
else
    redirect(base_url().'index.php/main/contact?statusMessage=0', 'location');
}

Если требуется дополнительная информация, пожалуйста, оставьте комментарий, и я добавлю его как можно скорее

1 ответ

Решение

Конструктор берет путь к локальному файлу базы данных, но вы, похоже, предоставляете ему HTTP URI. Вы должны удалить или заменить base_url(),

Другие вопросы по тегам