Почему geoip создает исключение?


Почему этот код:

geoip_country_code_by_name('unknown'); 

Генерировать исключение ErrorException, когда должно быть возвращено значение false?

Author: Wrikken, 2013-09-27

2 answers

Это ошибка в пакете GeoIP и не исправлена ни в одном выпуске ( см. Эту редакцию ). Вы можете решить эту проблему, скомпилировав исходный код из последней магистрали.

Отредактировано: спасибо Wrikken за указание на то, как Laravel обрабатывает ошибки.

С GeoIP geoip_country_code_by_name вызовет ошибку (E_NOTICE) всякий раз, когда имя не может быть найдено. Laravel всегда будет устанавливать сообщение об ошибке в -1 и обрабатывать все ошибки (даже уведомления) и переводить их в Исключения ошибок . Обычно можно перехватывать исключения ошибок с помощью блока try-catch, но в данном случае это невозможно, потому что Laravel никогда не создает исключение, он просто переводит его для отображения и ведения журнала.

Ошибку можно игнорировать с помощью @-оператора. Это немного плохо, так как это будет игнорировать все ошибки, которые может вызвать функция. В этом случае, однако, только другая ошибка geoip_country_code_by_name может вызвать предупреждение, когда база данных недоступна. Поэтому вы можете безопасно игнорировать ошибку, если убедитесь, что база данных доступна: (Код не проверен)

if (geoip_db_avail(GEOIP_COUNTRY_EDITION))
{
    @geoip_country_code_by_name('unknown');
}
else
{
    // Throw exception or handle the error
    throw new Exception(
       "Required database not available at " . 
       geoip_db_filename(GEOIP_COUNTRY_EDITION) 
    );

}

Редактировать: Теперь Laravel выдает исключение ErrorException, чтобы его можно было поймать с помощью блока try-catch. На момент написания этой статьи это изменение еще не было внесено ни в один выпущенный тег. Но ошибки перехвата , вероятно, будут работать с Laravel/Framework>=4.0.8.

 3
Author: Matteus Hemström, 2017-05-23 12:14:30

В версии модуля 1.1.0 исправлена ошибка https://pecl.php.net/package-changelog.php?package=geoip&release=1.1.0

 1
Author: FallDi, 2015-04-23 11:22:08