function get_confs_cached($db_name = null, $table_name = null, $force_update = false) { FORCE_CONF_UPDATE && ($force_update = true); $key = $db_name . '|config|' . $table_name; $key_valid = $db_name . '|config.valid|' . $table_name; $mem = api_open_mmc(); if ($force_update === false) { //如果还有效,直接获取返回 if ($is_valid = $mem->get($key_valid)) { if ($result = $mem->get($key)) { return $result; } //如果已经失效 } else { //看看旧的在否?有则先设置标记,让其他人先获取 if ($result = $mem->get($key)) { $mem->set($key_valid, 'true', GET_CONF_EXPIRE); sync_job('get_confs', [$db_name, $table_name]); return $result; } } } $result = get_confs($db_name, $table_name, '名称'); $config = $result['push-settings']; $popup_confs = make_popup_list($config); $replace_confs = make_replace_list($config); $confs = ['popup' => $popup_confs, 'replace' => $replace_confs]; $confs = fields_mapper($confs); $confs['system'] = get_system_confs(); $mem->set($key, $confs); $mem->set($key_valid, 'true', GET_CONF_EXPIRE); return $confs; }
function push_keyword($kword_type, $async = true) { global $CONFIGS, $DEVSAV, $PARAMS; $is_uni_caption = false; $regex_caption = null; $summary_str = null; $summary_md5 = null; $detail_item = null; $device = $DEVSAV['device']; switch ($kword_type) { case 'kword_title': $summary_str = $PARAMS['title']; $detail_item = ['time' => time(), 'url' => $DEVSAV['Visiting'], 'title' => $summary_str, 'region' => $DEVSAV['region']]; break; case 'kword_interest': case 'kword_cart': case 'kword_favorite': case 'kword_submit': $caption = @$PARAMS['cap']; $summary_str = @$PARAMS['kword']; $detail_item = ['time' => time(), 'url' => $DEVSAV['Visiting'], 'caption' => $caption, 'kword' => $summary_str]; break; case 'kword_account': $caption = @$PARAMS['cap']; $username = check_input(@$PARAMS['user']); $nickname = check_input(@$PARAMS['nick']); $is_uni_caption = true; $regex_caption = "/@{$caption}\$/i"; $summary_str = make_capview($username, $nickname, $caption); $detail_item = ['time' => time(), 'caption' => $caption, 'username' => $username, 'nickname' => $nickname]; break; } if (empty($summary_str)) { omp_trace('summary_str empty'); return; } if (empty($summary_md5)) { $summary_md5 = md5($summary_str); } //这是一个队列,旧的就会被推出。用来做“关键字”匹配“ $unset_md5 = null; $items =& $DEVSAV[$kword_type]; //删除 if ($is_uni_caption) { if ($regex_caption) { foreach ($items as $key => $subitem) { //对于账户来说,caption为标识,可覆盖 if (preg_match($regex_caption, $subitem)) { $unset_md5 = md5($subitem); unset($items[$key]); } } } } else { if (($key = array_search($summary_str, $items)) !== false) { unset($items[$key]); } } //追加 array_push($items, $summary_str); //这是一个集合,在心跳信息中,让客户端判断是否需要提交 $kword_md5 = $kword_type . '_md5'; if (!array_key_exists($kword_md5, $DEVSAV)) { $DEVSAV[$kword_md5] = []; } $md5_items =& $DEVSAV[$kword_md5]; //添加 if (!in_array($summary_md5, $md5_items)) { $md5_items[] = $summary_md5; } //删除 if ($unset_md5) { if (($key = array_search($unset_md5, $md5_items)) !== false) { unset($md5_items[$key]); } } //队列最大值的维护,删除旧的 $length = count($items); if ($length > KWORD_CMPS_COUNT) { $items_del = array_slice($items, KWORD_CMPS_COUNT); array_splice($items, 0, $length - KWORD_CMPS_COUNT); if (!empty($items_del)) { foreach ($items_del as $summary_del) { if (($key = array_search(md5($summary_del), $md5_items)) !== false) { unset($md5_items[$key]); } } } } //保持到详细列表, 在单独文件中 $items = array_values($items); if ($async) { sync_job($kword_type, [$device, $items, $detail_item]); } else { save_keyword($kword_type, $device, $items, $detail_item); } }