0

Web アプリで予期しないエラー メッセージをすべてキャッチし、一般的なメッセージをエンド ユーザーに表示しようとしています。しかし、現時点では、いくつかの 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)」というメッセージを示すエラー メッセージが 1 つ表示されます。

しかし、別の Web サーバーでこれと同じロジックを試しているところ、さらに多くのエラー メッセージが表示されます。

PHP エラーが発生しました

重大度: 通知

メッセージ: 未定義のプロパティ: スイッチ::$_password

ファイル名: core/Model.php

行番号: 51 PHP エラーが発生しました

重大度: 通知

メッセージ: 未定義のプロパティ: スイッチ::$_userId

ファイル名: core/Model.php

行番号: 51 switch_model get_logs e handler PHP エラーが発生しました

重大度: 警告

メッセージ: ヘッダー情報を変更できません - ヘッダーは既に送信されています (出力は /myapp/system/core/Exceptions.php:185 で開始)

ファイル名: core/Common.php

行番号: 438 エラーが発生しました

デバイスに接続できません。管理者に連絡してください!(1)

CI からのこれらのメッセージが何を意味するのかも疑問に思っていますが、Google で検索できます。今のところ、これらのメッセージがユーザーに表示されないようにする方法を考えています。私はそれらをログに記録したいだけです。CI の config.php には、 $config['log_threshold'] = 1; があります。

ありがとう。

編集1

エラーが発生する理由がわかりました.2つの変数を適切に宣言していなかったためです。しかし、予期しないエラーが GUI に表示されるのを防ぐために、私が整理するのを手伝ってくれれば、それは大歓迎です!

4

1 に答える 1

0

これらは CodeIgniter のもののように見えるかもしれませんが、実際には PHP のものです。PHP のエラー処理全般について読む必要があるかもしれませんが、ここではCI が好きな人からの 50000 フィートの概要を説明します。原則として、dev では可能な限り厳密にエラー報告を行う必要があり、prod ではファイルにログを記録する必要があります (可能であれば、エンド ユーザーには決して表示されません)。

于 2013-01-23T02:16:41.717 に答える