|
|
<?php
|
|
|
if (!defined('BASEPATH'))
|
|
|
exit('No direct script access allowed');
|
|
|
|
|
|
class Cache extends CI_Controller
|
|
|
{
|
|
|
//缓存文件绝对路径
|
|
|
private $dir = '';
|
|
|
//存放缓存文件的数组
|
|
|
private $file = array();
|
|
|
//存放缓存文件夹的数组
|
|
|
private $path = array();
|
|
|
//缓存更新接口
|
|
|
private $cache_api = '';
|
|
|
//缓存更新参数
|
|
|
private $post_para = '';
|
|
|
//当前站点域名
|
|
|
private $current_domain = '';
|
|
|
//文件更新日期
|
|
|
private $file_time = array();
|
|
|
|
|
|
function __construct()
|
|
|
{
|
|
|
parent::__construct();
|
|
|
if (!$this->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
|