input->get('site_code')) { $this->permission->is_admin(); } $this->load->model('Area_model'); $this->load->model('InfoStructures_model'); $this->load->model('Information_model'); $this->site_code = $this->input->get('site_code') ? $this->input->get('site_code') : $this->config->item('site_code'); } /** * * 公有函数:扫描已有缓存文件并更新。 * * 必要参数: * @param String $site_code * */ public function update() { $returnType = $this->input->get('type'); //设置缓存文件文件夹 $cache_config = $this->config->item('cache'); $current_cache_config = $cache_config[$this->site_code]; $this->dir = $current_cache_config['cache_path']; //设置当前站点 $this->current_domain = $current_cache_config['site_url']; //$this->config->item('site_url'); //echo $this->config->item('site_url'); //设置缓存更新接口及POST参数 $this->cache_api = $current_cache_config['cache_api']; $this->post_para = $current_cache_config['cache_api_para']; //遍历缓存文件夹 $this->tree($this->dir, $this->file, $this->path, $this->file_time); //print_r($this->file); //print_r($this->path); //print_r($this->file_time); //die(); //按目录筛选结果 $this->filter($this->file, $this->path); //整理需要传递到视图的数据 $data['file'] = $this->file; $data['path'] = $this->path; $data['file_time'] = $this->file_time; $data['cache_api'] = $this->cache_api; $data['post_para'] = $this->post_para; if ($returnType === 'json') { //print_r($cache_config[$this->site_code]); //echo('json'); //print_r($data['file']); echo (json_encode($data['file'])); } else { //视图 $this->load->view('cache/update', $data); } } /** * * 公有函数:扫描已有缓存文件并更新。 * * 必要参数: * @param String $site_code * */ public function sitemap() { header("Content-type:text/xml"); //设置缓存文件文件夹 $cache_config = $this->config->item('cache'); $current_cache_config = $cache_config[$this->site_code]; $this->dir = $current_cache_config['cache_path']; //设置当前站点 $this->current_domain = $this->config->item('site_url'); //设置缓存更新接口及POST参数 $this->cache_api = $current_cache_config['cache_api']; $this->post_para = $current_cache_config['cache_api_para']; //遍历缓存文件夹 $this->tree($this->dir, $this->file, $this->path, $this->file_time); //按目录筛选结果 $this->filter($this->file, $this->path); //整理需要传递到视图的数据 $data['file'] = $this->file; $data['path'] = $this->path; $data['file_time'] = $this->file_time; $data['cache_api'] = $this->cache_api; $data['post_para'] = $this->post_para; //排序file数组 sort($data['file']); //生成sitemap $dom = new DomDocument('1.0', 'utf-8'); $urlset = $dom->createElement('urlset'); $urlset->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9'); $dom->appendchild($urlset); foreach ($data['file'] as $f) { $url = $dom->createElement('url'); $loc = $dom->createElement('loc'); $text = $dom->createTextNode($f); $loc->appendchild($text); $url->appendchild($loc); $urlset->appendchild($url); } echo ($dom->saveXML()); } /** * * 私有函数:递归遍历缓存文件夹,将目录存放到$path,文件存放到$file。 * * 必要参数: * @param String $dir - 需要遍历的目录 * @param Array $file - 存放文件结果的数组引用 * @param Array $path - 存放路径结果的数组引用 * @param Array $file_time - 存放文件更新日期的数组引用 * */ private function tree($dir, &$file, &$path, &$file_time) { $mydir = dir($dir); while ($f = $mydir->read()) { if (is_dir("$dir/$f") && $f != "." && $f != ".." && (strpos($dir, '/cn/') === false) && (strpos($dir, '/amp/') === false) && (strpos($dir, '/js/') === false)) { $path[] = "$dir/$f"; $this->tree("$dir/$f", $file, $path, $file_time); } else { if ($f != '.' && $f != '..' && (strpos($f, '/cn/') === false) && (strpos($f, '/amp/') === false) && (strpos($f, '.pdf') === false) && (strpos($f, '.mobile.htm') === false) && (strpos($f, '/js/') === false) && (strpos($f, '.amp') === false)) { $file_temp = str_replace('/index.htm###', '', $f . '###'); $file_temp = str_replace('###', '', $file_temp); $path_temp = str_replace($this->dir, '', $dir); $url_temp = $this->current_domain . $path_temp . '/' . $file_temp; $url_temp = str_replace('/index.htm', '/', $url_temp); $file_time[$url_temp] = date("F d Y H:i:s", filemtime("$dir/$f")); $encode = mb_detect_encoding($url_temp, array('ASCII', 'GBK', 'ISO-8859-1', 'UTF-8')); $_url_temp = mb_convert_encoding($url_temp, 'UTF8', $encode); $file[] = $_url_temp; } } } $mydir->close(); } /** * * 私有函数:筛选目录和文件。 * * 必要参数: * @param Array $file - 存放文件结果的数组引用 * @param Array $path - 存放路径结果的数组引用 * * 可选参数:POST参数 - $_POST['p'] * */ private function filter(&$file, &$path) { if (isset($_POST['p']) && !empty($_POST['p'])) { //删选文件 foreach ($file as &$f) { (stripos($f, $_POST['p']) !== false) or $f = false; } $file = array_filter($file); //删选目录 foreach ($path as &$p) { (stripos($p, $_POST['p']) !== false) or $p = false; } $path = array_filter($path); } } } //end of Cache