为什么这段代码:
geoip_country_code_by_name('unknown');
生成ErrorException,何时必须返回false?
答案 0 :(得分:4)
这是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一起工作。
答案 1 :(得分:1)