/** * アクセス情報をログに記録する */ public static function recAccessLog($logfile, $maxline = 100, $format = 'dataphp') { global $_conf, $_login; // ログファイルの中身を取得する if ($format == 'dataphp') { $lines = DataPhp::fileDataPhp($logfile); } else { $lines = FileCtl::file_read_lines($logfile); } if ($lines) { // 制限行調整 while (sizeof($lines) > $maxline - 1) { array_pop($lines); } } else { $lines = array(); } $lines = array_map('rtrim', $lines); // 変数設定 $date = date('Y/m/d (D) G:i:s'); // IPアドレスを取得 if (array_key_exists('HTTP_X_REAL_IP', $_SERVER)) { $remote_addr = $_SERVER["HTTP_X_REAL_IP"]; } else { $remote_addr = ''; } // HOSTを取得 if (array_key_exists('HTTP_X_REAL_IP', $_SERVER)) { $remote_host = gethostbyaddr($_SERVER['HTTP_X_REAL_IP']); } else { $remote_host = ''; } if (!$remote_host) { $remote_host = gethostbyaddr($_SERVER["HTTP_X_REAL_IP"]); } if ($remote_host == $_SERVER["HTTP_X_REAL_IP"]) { $remote_host = ''; } // UAを取得 if (array_key_exists('HTTP_USER_AGENT', $_SERVER)) { $user_agent = $_SERVER['HTTP_USER_AGENT']; } else { $user_agent = ''; } // リファラを取得 if (array_key_exists('HTTP_REFERER', $_SERVER)) { $referrer = $_SERVER['HTTP_REFERER']; } else { $referrer = ''; } $user = isset($_login->user_u) ? $_login->user_u : ''; // 新しいログ行を設定 $newdata = implode('<>', array($date, $remote_addr, $remote_host, $user_agent, $referrer, '', $user)); //$newdata = htmlspecialchars($newdata, ENT_QUOTES); // まずタブを全て外して $newdata = str_replace("\t", "", $newdata); // <>をタブに変換して $newdata = str_replace("<>", "\t", $newdata); // 新しいデータを一番上に追加 @array_unshift($lines, $newdata); $cont = implode("\n", $lines) . "\n"; FileCtl::make_datafile($logfile, $_conf['p2_perm']); // 書き込み処理 if ($format == 'dataphp') { DataPhp::writeDataPhp($logfile, $cont, $_conf['p2_perm']); } else { FileCtl::file_write_contents($logfile, $cont); } return true; }
/** * アクセス(ログイン)情報をログに記録する * * @access public * @return boolean */ function recAccessLog($logfile, $maxline = 100, $format = 'dataphp') { global $_conf, $_login; // ログファイルの中身を取得する $lines = array(); if (file_exists($logfile)) { if ($format == 'dataphp') { $lines = DataPhp::fileDataPhp($logfile); } else { $lines = file($logfile); } } if ($lines) { // 制限行調整 while (sizeof($lines) > $maxline - 1) { array_pop($lines); } } else { $lines = array(); } $lines = array_map('rtrim', $lines); // 変数設定 $date = date('Y/m/d (D) G:i:s'); $user = isset($_login->user_u) ? $_login->user_u : ""; // 新しいログ行を設定 $newdata = implode('<>', array($date, $_SERVER['REMOTE_ADDR'], P2Util::getRemoteHost(), geti($_SERVER['HTTP_USER_AGENT']), geti($_SERVER['HTTP_REFERER']), '', $user)); //$newdata = htmlspecialchars($newdata, ENT_QUOTES); // まずタブを全て外して $newdata = str_replace("\t", "", $newdata); // <>をタブに変換して $newdata = str_replace("<>", "\t", $newdata); // 新しいデータを一番上に追加 @array_unshift($lines, $newdata); $cont = implode("\n", $lines) . "\n"; FileCtl::make_datafile($logfile, $_conf['p2_perm']); // 書き込み処理 if ($format == 'dataphp') { if (!DataPhp::writeDataPhp($logfile, $cont, $_conf['p2_perm'])) { return false; } } else { if (false === file_put_contents($logfile, $cont, LOCK_EX)) { trigger_error("file_put_contents(" . $logfile . ")", E_USER_WARNING); return false; } } return true; }