识别陷阱php / codeigniter错误的位置

时间:2013-01-23 01:24:54

标签: php codeigniter error-handling

我正在尝试在我的网络应用中捕获所有意外错误消息,并向最终用户显示通用消息。但截至目前,我的页面上出现了几条php / codeigniter错误消息。

我的控制器中有以下逻辑:

public function logs()
{
    try {
        $data['logcontents'] = $this->switches_model->get_logs($this->uri->segment(7), $this->uri->segment(4));
        $data['main_content']='logs';
        $this->load->view('includes/template', $data);
    }
    catch (Exception $e) {
        show_error($e->getMessage());
    }   
}// end logs

我的模型看起来像这样:

public function get_logs($dnsName, $switchname)
{
     try {              
            if ( $switch_obj->connect() )  {
            //do something                  
            return $data;
             }
        else {
            throw new Exception('Connection');

        }//end if
        }// end try
    catch (Exception $e) {
        print 'switches_model get_logs e handler<BR>';
        $this->error_handler($e->getMessage());
        return false;
    }

最后,这就是我模型中的error_handler()方法:

    private function error_handler($emess)
    {
        switch ($emess)
        {
            case 'Connection':
                $userfriendlyemess = "Unable to connect to device. Please contact administrator! (1)";
                break;

            case 'Empty Data Set':
                $userfriendlyemess = "Device connected.  Unable to get data.  Please contact administrator! (3)";
                break;
            case 'Failure':
                $userfriendlyemess = "Oops!  Unable to complete command. Please contact administrator! (4)";
                break;
            //handling unknown errors   
            default:
                $userfriendlyemess = "Oops!  Something big just happened. (99)";
                log_message('error', $emess); //write to ci logs
                break;
        }
        throw new Exception($userfriendlyemess);            
    }

我在本地测试了这个逻辑,当我模拟连接失败时,我收到一条错误消息,显示消息“无法连接到设备。请联系管理员!(1)”,这正是我所期待的。

但是我在不同的Web服务器上尝试相同的逻辑,现在,我收到了一些额外的错误消息:

  

遇到PHP错误

     

严重性:注意

     

消息:未定义属性:switches :: $ _ password

     

文件名:core / Model.php

     

行号:51遇到PHP错误

     

严重性:注意

     

消息:未定义属性:switches :: $ _ userId

     

文件名:core / Model.php

     

行号:51 switches_model get_logs e   处理程序遇到PHP错误

     

严重性:警告

     

消息:无法修改标头信息 - 已发送的标头   (输出始于   /myapp/system/core/Exceptions.php:185)

     

文件名:core / Common.php

     

行号:438遇到错误

     

无法连接到设备。请联系管理员! (1)

我也想知道来自CI的这些消息是什么意思......但我可以谷歌他们。现在,我只是想知道如何防止这些消息出现在用户身上。我只想让他们登录。 在我的CI的config.php中,我有$ config ['log_threshold'] = 1;

感谢。

编辑1

我弄清楚为什么我会收到错误 - 这是因为我没有正确地声明2个变量。但是,如果你可以帮助我解决以防止意外错误出现在GUI上,那将非常感激!

1 个答案:

答案 0 :(得分:0)

看起来这些来自CodeIgniter,但它们实际上来自PHP。您可能应该阅读一般的PHP错误处理,但感谢CI的人here is a 50000 ft overview。通常,您应该在dev上尽可能严格地报告错误,并且在prod上它应该记录到文件中(如果可能的话,永远不会向最终用户显示)。