0

エラーが発生しました致命的なエラー:クラス'CI_Controller'が233行目の....\ core\CodeIgniter.phpに見つかりません

application / core / My_Exception.phpにMy_Exceptionsというクラスを作成します。基本的に、ユーザーが自分のサイトからエラーを受け取ったときにメールを受け取りたいです。

<?php
class My_Exceptions extends CI_Exceptions{
    var $CI="";
    function __construct(){
        parent::__construct();
        $this->CI =& get_instance();
    }
    function show_404($page = '', $log_error = TRUE)
{
    $heading = "404 Page My Not Found";
    $message = "The page you requested was not found.";

    // By default we log this, but allow a dev to skip it
    if ($log_error)
    {
        log_message('error', '404 Page Not Found --> '.$page);
    }

    //Email to Developer
    $this->CI->load->library('email');
    $uri = $this->CI->uri->uri_string();  
    $this->CI->email->from('error-donotreply@YOURAPP.com', 'APP Error');
    $this->CI->email->to('youremail@example.org');
    $this->CI->email->subject('APP Error [severity: '.$severity.']');
    $this->CI->email->message("Page not Found. From URL: ".$uri);
    $this->CI->email->send();

    echo $this->show_error($heading, $message, 'error_404', 404);
    exit;
}
}

助けてください !!!

4

2 に答える 2

4

Exceptionsクラスは、メインのCI_Controllerの前にロードされます。

これは、エラーが発生した場合、「$ this-> CI」が存在しないため、CIを使用して電子メールを送信できないことを意味します。

あなたの選択肢は、ネイティブPHPを使用して電子メールを送信するか、私が行うことです。前日からのエラーログを自動的に電子メールで送信します(CRONジョブを使用)。そうすれば、すべてのエラーを1日1回確認できます。

于 2012-07-24T03:18:50.963 に答える
4

あなたが答えを受け入れたことは知っていますが、別の方法はCIログクラスを拡張することです。

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * MY_Log Class
 *
 * This library extends the native Log library.
 * It adds the function to have the log messages being emailed when they have been outputted to the log file.
 *
 * @package     CodeIgniter
 * @subpackage      Libraries
 * @category        Logging
 * @author      Johan Steen
 * @link        http://wpstorm.net/
 */
class MY_Log extends CI_Log {
    private $_reporting_email = 'test@me.com';
    private $_subject = 'CI Logger';

    /**
     * Constructor
     *
     * @access  public
     */
    function __construct() {
        parent::__construct();
    }

    /**
     * Write Log File
     *
     * Calls the native write_log() method and then sends an email if a log message was generated.
     *
     * @access  public
     * @param   string  the error level
     * @param   string  the error message
     * @param   bool    whether the error is a native PHP error
     * @return  bool
     */
    function write_log($level = 'error', $msg, $php_error = FALSE) {
        $result = parent::write_log($level, $msg, $php_error);

        if ($result == TRUE && strtoupper($level) == 'ERROR') {
            $message = "An error occurred: \n\n";
            $message .= $level.' - '.date($this->_date_fmt). ' --> '.$msg."\n";

            $to = $this->_reporting_email;
            $subject = $this->_subject;
            $headers = 'From: Example Name <no-reply@example.com>' . "\r\n";
            $headers .= 'Content-type: text/plain; charset=utf-8\r\n';

            mail($to, $subject, $message, $headers);
        }
        return $result;
    }
}
?>
于 2012-07-24T07:18:56.383 に答える