为什么这个代码:
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 block 捕获 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 block 捕获它。在撰写本文时,此更改尚未出现在任何已发布的标签中。但是捕获错误可能适用于 Laravel/Framework >= 4.0.8。
关于php - 为什么 geoip 会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19055023/