2013-01-07 60 views
6

Bir istemci, tüm GET/POST isteklerinin günlüğe kaydedilip 90 gün süreyle uygulanmasını gerektirir. GETS/POSTS'un bir kısmını kaydeden bir HOOK yazdım ama beklediğimden daha az veri var. Örneğin, form verilerini gönderirken, girişler günlüğe kaydedilmiyor gibi görünmektedir. Benzer bir şey yazmış olan var mı? İşte Codeigniter - Oturum açmak için kanca GET/POST REQUESTS

bugüne kadar benim sürümü:

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') 
     )); 
    } 

} 

Bu veriler aşağıdaki gibidir 'Logging_m' adlı bir model saklanan: Patrick SAVALLE tarafından mentionned

<?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 */ 
+0

Formunu, işleminizin eksik olduğunu kaydedebilirsiniz. –

+1

İlginç bir soru +1. Form girişinizin bir var_dump'ını yapabilir ve aynı giriş için günlüğün yanına gönderebilir, böylece farkı bulabiliriz. – WebweaverD

+0

Dizi değerlerinizin tümü beklediğiniz gibi mi ayarlanıyor, yoksa yalnızca GET/POST bilgisi mi? Ayrıca, sadece merak ediyorum, $ _POST dizisini $ this-> input-> post() zaten veriyi döndürdüğünde iade etmek için print_r neden kullanıyorsunuz? Verileri temizlemiyor gibi görünüyorsun, sadece kırparak. Sadece gereksiz görünüyor. –

cevap

10

kancaları kullanmalıdır . Diğer tüm CI öğelerini kullanabilmeniz için post_controller_constructor kancasını kullanın. ./application/config/config.php olarak

1) dosyası ./application/hooks/http_request_logger.php Aşağıdaki, kanca

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

3) ekleyin ve örnek olarak aşağıdaki kodu ./application/config/hooks.php olarak $config['enable_hooks'] = TRUE

2 adı verilen).

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)); 
    } 

} 

Bunu test ettim ve benim için çalışıyor (yapılandırma dosyanızda günlüğe kaydetme işlemini etkinleştirdiğinizden emin olun).

+0

$ CI'yi bir kanca dosyasında herkese açık olarak bildirmek uygun değil mi? –

+0

@ VipinKr.Singh Yine baktığımda, bu işlevin dışında herhangi bir sebep bildirmek için bir neden göremiyorum. Örneği değiştirdim. –

+0

Hiçbir şey bilgi sayfasında kodunuzdan sayfa oluşturulmuyor. :( –

İlgili konular