Codeigniter从库中隐藏错误。为什么?

时间:2012-09-29 10:28:43

标签: codeigniter exception facebook-php-sdk

因为我概述了here.

,所以我遇到了一个小问题

我提出了一个新问题,因为这更为一般,也许可以帮助别人。

基本上,我将Facebook SDK集成到Codeigniter中作为库。

SDK需要Json和Curl。

在base_facebook.php文件中有以下代码:

    if (!function_exists('curl_init')) {
  throw new Exception('Facebook needs the CURL PHP extension.');
}
if (!function_exists('json_decode')) {
  throw new Exception('Facebook needs the JSON PHP extension.');
}

如果这些功能不可用,我希望会发出错误告诉我这样的问题。然后我可以安装正确的软件包并继续。

实际发生的事情是,即使我将错误报告设置为E_ALL,也会返回空白页。

这使得它无法进行调试,经过多次播放后我得出结论是因为我的服务器上没有安装CURL。

我的问题是为什么codeigniter显示空白页而不是基于库的例外? 此外,即使库中存在异常,为什么页面的其余部分不会继续执行。 基本上CI似乎正在使用无效的例外......

COuld有人建议吗?

感谢

1 个答案:

答案 0 :(得分:0)

  

我的问题是为什么codeigniter显示空白页而不是基于库的例外?

很可能因为display_errors设置为“关闭”。

虽然这是建议用于生产环境(网站用户不应该看到内部错误消息 - 它可能会给他们关于内部的信息,他们不应该有这些信息) - 它在开发时不是很有帮助,你在哪里因为开发人员想知道出了什么问题。

因此,请检查CI是否具有“调试”设置,或者在PHP配置中是否已将其设置为关闭。

(也许CI或您的配置设置的方式是将错误记录到文件中。也建议用于生产;在开发时,您必须密切关注此文件。)

  

此外,即使库中存在异常,为什么页面的其余部分不会继续执行。

因为这就是假设的例外工作方式 - 如果它们在达到您应用的“顶级”时未被捕获,则会导致致命错误,当脚本发生时脚本会死掉。

熟悉try { … } catch(…) { … }的概念,以处理脚本流程中可能出现的异常。

(实际上,如果您正在使用高级PHP框架,那么您已经不知道所有这些了,这有点令人惊讶......)