为什么这段代码:
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.