8

クライアントは、すべての GET/POST リクエストがログに記録され、適用のために 90 日間保存される必要があります。GETS / POSTS の一部を記録しているように見える HOOK を作成しましたが、予想よりもデータが少なくなっています。たとえば、フォーム データを送信すると、エントリがログに記録されないようです。誰かが似たようなものを書いたことがありますか?

これまでの私のバージョンは次のとおりです。

class Logging {

    function __construct() {
        $this->CI =& get_instance();
    }

    function index() {
        $this->CI->load->model('Logging_m');
        $this->CI->load->model('Portal_m');

        //get POST and GET values for LOGGING        
        $post = trim(print_r($this->CI->input->post(), TRUE));
        $get = trim(print_r($this->CI->input->get(), TRUE));

        $this->CI->Logging_m->logPageView(array(
                'portal_id' => $this->CI->Portal_m->getPortalId(),
                'user_id' => (!$this->CI->User_m->getUserId() ? NULL : $this->CI->User_m->getUserId()),
                'domain' => $_SERVER["SERVER_NAME"],
                'page' => $_SERVER["REQUEST_URI"],
                'post' => $post,
                'get' => $get,
                'ip' => $this->CI->input->ip_address(),
                'datetime' => date('Y-m-d H:i:s')
        ));
    }

}

このデータは、次のような「Logging_m」というモデルに保存されます。

<?php 
class Logging_m extends CI_Model {

  function __construct() {
    parent::__construct();
  }

  function logPageView($data) {
    $this->db->insert('port_logging', $data);
  }

}

/* End of file logging_m.php */
/* Location: ./application/models/logging_m.php */
4

1 に答える 1

16

Patrick Savalle が述べたように、フックを使用する必要があります。フックを使用post_controller_constructorして、他のすべての CI を使用できるようにします。

1)./application/config/config.phpセットで$config['enable_hooks'] = TRUE

2)./application/config/hooks.php次のフックを追加します

$hook['post_controller_constructor'] = array(
    'class' => 'Http_request_logger',
    'function' => 'log_all',
    'filename' => 'http_request_logger.php',
    'filepath' => 'hooks',
    'params' => array()
);

3) ファイル./application/hooks/http_request_logger.phpを作成し、例として次のコードを追加します。

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Http_request_logger {

    public function log_all() {
        $CI = & get_instance();
        log_message('info', 'GET --> ' . var_export($CI->input->get(null), true));
        log_message('info', 'POST --> ' . var_export($CI->input->post(null), true));                
        log_message('info', '$_SERVER -->' . var_export($_SERVER, true));
    }

}

私はそれをテストしましたが、うまくいきます(設定ファイルでログが有効になっていることを確認してください)。

于 2013-01-16T13:35:22.643 に答える