function log_update($kind, $filename, $key, $mustkey, $data) { $log_data = log_read($filename); $_key = explode(':', $key); $name = log::set_fieldname($kind); $put = false; for ($i = 0; $i < count($log_data); $i++) { $fld = log::line2field($log_data[$i], $name); $sw_update = true; foreach ($_key as $idx) { if (isset($data[$idx]) && isset($fld[$idx]) && $data[$idx] != $fld[$idx]) { $sw_update = false; break; } /* if (empty($data[$idx]) || empty($fld[$idx])) { $sw_update = false; break; } if ($data[$idx] != $fld[$idx]) { $sw_update = false; break; } */ } if ($sw_update) { $log_data[$i] = log::array2table($data); $put = true; break; } } // Add if (!$put) { if ($mustkey) { if (log_mustkey_check($_key, $data)) { $log_data[] = log::array2table($data); $put = true; } } else { $log_data[] = log::array2table($data); $put = true; } } if (!$put) { return ''; } $fp = @fopen($filename, 'wb'); if ($fp == false) { return ''; } @flock($fp, LOCK_SH); foreach ($log_data as $_log_data) { fputs($fp, $_log_data); } @flock($fp, LOCK_UN); @fclose($fp); }
function log_put_guess($data) { // ユーザを推測する $user = log::guess_user($data['user'], $data['ntlm'], $data['sig']); if (empty($user)) { return; } $filename = log::set_filename('guess_user', ''); // ログファイル名 if (file_exists($filename)) { $src = file($filename); // ログの読み込み } else { // 最初の1件目 $data = log::array2table(array($data['ua'], $data['host'], $user, "")); log_put($filename, $data); return; } $sw = FALSE; foreach ($src as $_src) { $x = trim($_src); $field = log::table2array($x); // PukiWiki 表形式データを配列データに変換 if (count($field) == 0) { continue; } if ($field[0] != $data['ua']) { continue; } if ($field[1] != $data['host']) { continue; } if ($field[2] != $user) { continue; } $sw = TRUE; break; } if ($sw) { return; } // 既に存在 // データの更新 $data = log::array2table(array($data['ua'], $data['host'], $user, '')); log_put($filename, $data); }