为什么这个代码:
geoip_country_code_by_name('unknown');
产生ErrorException,什么时候必须返回false?
这是 GeoIP 包中的一个错误,在任何版本 (<= 1.0.8) 中都没有修复。但是,它固定在后备箱中(请参阅此修订版)。您可以通过从最新的主干编译源来解决这个问题。
已编辑:感谢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.0 模块版本中修复了错误https://pecl.php.net/package-changelog.php?package=geoip&release=1.1.0