我有一个记录错误的基本控制器,我希望在日志消息中包含 ALL 请求数据,所有标头和请求正文。我怎么能在CodeIgniter中做到这一点?
答案 0 :(得分:2)
相当于$this->input
的CodeIgniter file_get_contents('php://input')
包含来自foo var_dump($this->input)
的输出的所有Body请求(如果有):
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 seeion 中,例如:ip_address, user_agent ,last_activity
答案 1 :(得分:1)
$this->load->library('user_agent');
$reqUserIp = $this->input->ip_address();
$userAgent = $this->agent->agent_string();
$reqHeaders = $this->input->request_headers();
答案 2 :(得分:1)
您可以使用帖子控制器hook。
然后在 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;
}
}
?>