php – 为什么geoip会抛出异常?

为什么这段代码:

geoip_country_code_by_name('unknown'); 

生成ErrorException,什么时候必须返回false?

解决方法:

这是GeoIP包中的错误,并未在任何版本中修复(< = 1.0.8).然而它固定在行李箱中(see this revision).您可以通过编译来自最新主干的源来解决此问题.

编辑:感谢Wrikken指出Laravel如何处理错误.

使用GeoIP< = 1.0.8时,只要找不到名称,geoip_country_code_by_name就会触发错误(E_NOTICE). Laravel将始终将error_reporting设置为-1并处理所有错误(甚至通知)并将其转换为ErrorExceptions.通常情况下,可以使用try-catch块捕获ErrorExceptions,但在这种情况下,它是不可能的,因为Laravel从不抛出异常,它只是将其转换为显示和记录目的.

可以忽略@-operator的错误.这样做有点不好,因为它会忽略函数可能抛出的所有错误.但是,在这种情况下,当无法访问数据库时,唯一的其他错误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.

上一篇:python – 在Windows上安装GeoIP?


下一篇:ELK技术栈之-Logstash详解