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

标签 php laravel 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 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/

相关文章:

php - 按首字母排序sql查询

php - 获取sql中多列的合计

php - 未找到 Laravel excel 类 'ZipArchive'

laravel - 如何将 laravel 可邮寄到变量

javascript - 基于美国州的重定向页面,使用 Maxmind geoip2 JS

php - 使用 Laravel 将页面上不同子类别的产品分开

php - 如何根据onchange事件的sequence ID名称取值?

php - 新的 PHP 驱动程序 1.2.3 与 laravel 4.2 上的 MongoDB 3.4 不兼容

database - 我应该保存 GeoIP 数据吗

mysql - 尝试导入 CSV 文件时数据被截断