我有一个记录错误的基本控制器,我想在日志消息中包含所有请求数据、所有标头和请求正文。如何在 CodeIgniter 中做到这一点?
user1785721
问问题
3772 次
3 回答
1
CodeIgniter$this->input
相当于file_get_contents('php://input')
包含所有 Body 请求(如果有),来自 foo 的输出var_dump($this->input)
如下所示:
object(CI_Input)[9]
public 'ip_address' => boolean false
public 'user_agent' => boolean false
public '_allow_get_array' => boolean true
public '_standardize_newlines' => boolean true
public '_enable_xss' => boolean false
public '_enable_csrf' => boolean false
protected 'headers' =>
array (size=0)
empty
public 'security' => &
object(CI_Security)[8]
protected '_xss_hash' => string '' (length=0)
protected '_csrf_hash' => string '' (length=0)
protected '_csrf_expire' => int 7200
protected '_csrf_token_name' => string 'ci_csrf_token' (length=13)
protected '_csrf_cookie_name' => string 'ci_csrf_token' (length=13)
protected '_never_allowed_str' =>
array (size=10)
'document.cookie' => string '[removed]' (length=9)
'document.write' => string '[removed]' (length=9)
'.parentNode' => string '[removed]' (length=9)
'.innerHTML' => string '[removed]' (length=9)
'window.location' => string '[removed]' (length=9)
'-moz-bindin.......//and many other data.
对于标题 laso,您有 PHP 5.4 中的新命令,即headers_list()
. 此外, CI 视图中还可以包含许多其他数据,例如:ip_address, user_agent ,last_activity
于 2013-01-17T22:57:40.403 回答
0
有关标题详细信息
$this->load->library('user_agent');
$reqUserIp = $this->input->ip_address();
$userAgent = $this->agent->agent_string();
$reqHeaders = $this->input->request_headers();
于 2013-01-17T08:08:16.057 回答
0
您可以使用后控制器挂钩。
- 在application/config/config.php中启用钩子。
然后在application/config/hooks.php;
$hook['post_controller'] = array( 'class' => 'PostController', 'function' => 'log_it', 'filename' => 'PostController.php', 'filepath' => 'hooks', 'params' => array() );
在application/hooks/PostController.php中创建一个文件
<?php class PostController { private $ci; private $filepath; public function __construct() { $this->ci =& get_instance(); $log_path = ($this->ci->config->item('log_path') != '') ? $this->ci->config->item('log_path') : APPPATH.'logs/'; $this->filepath = $log_path.'action_log'; } public function log_it($log_message=NULL) { if ($log_message == NULL) { $log_message = date('d/m/Y H:i:s')."::"; $log_message .= $this->ci->session->userdata('username')."::"; $log_message .= $this->ci->input->ip_address()."::"; $log_message .= $this->get_client_ip()."::"; $log_message .= $this->ci->router->class."::"; $log_message .= $this->ci->router->method."::"; $log_message .= uri_string()."::"; if (isset($_POST)) { foreach ($_POST as $key => $value) { $log_message .= "[$key] => $value;"; } } $log_message .= "\r\n"; } $fp = fopen($this->filepath, FOPEN_WRITE_CREATE); fwrite($fp, $log_message); fclose($fp); } private function get_client_ip() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { //check ip from share internet $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { //to check ip is pass from proxy $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } } ?>
于 2013-01-17T08:11:06.503 回答