Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}