You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
9.0 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Information extends CI_Controller
{
public function __construct()
{
parent::__construct();
//$this->output->enable_profiler(TRUE);
$this->load->model('Information_model');
$this->load->model('InfoMetas_model');
$this->load->library('Tags_analysis');
}
public function index()
{
echo 'Information Index';
}
//优先使用传入的URL用于主动生成静态页面去映射(优先使用POST参数)
public function detail($url = ''){
$data = array();
if (empty($url)) {
$url = $this->input->get_post('static_html_url');
}
if (empty($url) || $url == 'index.php') {
$url = get_origin_url();
if (preg_match('/\?.*/', $url) == 1) {
$url = preg_replace('/\?.*/', '', $url);
//php_301($url);
//return;
}
}
//大小写转向只要url有大写字母的全部转到小写字母的url上
if ($url != mb_strtolower($url)) {
php_301(mb_strtolower($url));
return;
}
$data['detail'] = $this->Information_model->get_detail($url);
if ($data['detail'] === false || empty($data['detail']->ic_content)) {
send_404();
return false;
}
$data['canonical'] = '';
//新url转换到旧的url 278002649
if(strpos($data['detail']->is_path,'278002649') >= 0 || strpos($data['detail']->is_path,'278005102') >= 0){
$data['canonical'] = $data['detail']->ic_url;
//制作canonical
/*if($data['detail']->ic_type == 'country_info' || $data['detail']->ic_type == 'area_info'){
if(strpos($data['detail']->ic_url,'tours') > 0){
$info_url = explode('/',$data['detail']->ic_url);
$data['canonical'] = '/'.$info_url['2'].'/'.$info_url['1'].'.htm';
}elseif(strpos($data['detail']->ic_url,'travel-guide') > 0){
$data['canonical'] = substr($data['detail']->ic_url,0,strpos($data['detail']->ic_url,'travel-guide'));
}else{
$data['canonical'] = $data['detail']->ic_url.'.htm';
}
}elseif($data['detail']->ic_type == 'pd_tour'){
$tour_url = explode('/',$data['detail']->ic_url);
$product_code = explode('-',$tour_url['2']);
$data['canonical'] = '/tours/ah-'.$product_code['2'].'.htm';
}*/
//构造结构化标签---面包屑
if($data['detail']->ic_show_bread_crumbs){
$breadcrumblist = array();
$path_arr = explode(',',substr($data['detail']->is_path,0,strlen($data['detail']->is_path)-1));
$path_arr = array_splice($path_arr,1);
$path_arr = array_splice($path_arr,1);
//循环获取每个节点的信息
if($data['detail']->ic_type == 'area_info'){
$info = $this->Information_model->get_parent_info($path_arr['0'])['0'];
$breadcrumblist['0'] = new stdClass();
$breadcrumblist['1'] = new stdClass();
$breadcrumblist['2'] = new stdClass();
$breadcrumblist['0']->ic_url = $info->ic_url;
$breadcrumblist['0']->ic_url_title = $info->ic_url_title;
$breadcrumblist['1']->ic_url = '/'.strtolower($info->ic_url_title).'/travel-guide';
$breadcrumblist['1']->ic_url_title = $info->ic_url_title.' Travel Guide';
$breadcrumblist['2']->ic_url = $data['detail']->ic_url;
$breadcrumblist['2']->ic_url_title = $data['detail']->ic_url_title;
}else{
foreach($path_arr as $is_id){
$info = $this->Information_model->get_parent_info($is_id);
if(!empty($info)){
$info = $info['0'];
array_push($breadcrumblist,$info);
}
}
}
$data['detail']->construct_tag = make_construct_tag($breadcrumblist);
$data['detail']->breadcrumblist = make_breadcrumblist($breadcrumblist);
}
}else{
$data['canonical'] = $data['detail']->ic_url;
//将老的url指向新的url
if(strpos($data['detail']->ic_url,'.htm') > 0){
$now_url = substr($data['detail']->ic_url,0,strlen($data['detail']->ic_url)-4);
$now_info = $this->Information_model->get_detail($now_url);
if($now_info !== false){
$data['canonical'] = $now_url;
}
}
}
//进行标签替换
$data['detail']->ic_content = $this->tags_analysis->analysis($data['detail']);
$data['seo_title'] = $data['detail']->ic_seo_title;
$data['seo_keywords'] = $data['detail']->ic_seo_keywords;
$data['seo_description'] = $data['detail']->ic_seo_description;
$data['seo_url'] = $data['detail']->ic_url;
//print_r($data['detail']);die();
//判断是否有AMP版本并生成缓存文件
if ($this->InfoMetas_model->get($data['detail']->ic_id, 'AMP_STATUS') > 0) {
$AMP = $this->InfoMetas_model->get($data['detail']->ic_id, 'AMP');
if (!empty($AMP)) {
if (mb_substr($data['seo_url'], -1, 1) == '/') {
$data['amp_url'] = $data['seo_url'] . 'index.htm.amp.htm';
} else {
$data['amp_url'] = $data['seo_url'] . '.amp.htm';
}
$cache_path = 'd:/Dropbox/wwwcache/asiahighlights.com' . $data['amp_url'];
$dir = dirname($cache_path);
if (!is_dir($dir)) {
@mkdir($dir, 0777, true);
}
//表单替换和价格替换
$AMP_Clone_content = $data['detail']->ic_content;//因为tags_analysis是根据信息结构来替换的所以需要克隆一个信息结构然后用AMP代码覆盖ic_content
$data['detail']->ic_content = $AMP;
$AMP = $this->tags_analysis->analysis($data['detail']);
$data['detail']->ic_content = $AMP_Clone_content;
file_put_contents($cache_path, $AMP);
}
} else {
//尝试删除AMP文件
if (mb_substr($data['seo_url'], -1, 1) == '/') {
$amp_url = $data['seo_url'] . 'index.htm.amp.htm';
} else {
$amp_url = $data['seo_url'] . '.amp.htm';
}
$amp_file = 'd:/Dropbox/wwwcache/asiahighlights.com' . $amp_url;
if (file_exists($amp_file)) {
unlink($amp_file);
}
}
$data['meta_addon_css'] = $this->InfoMetas_model->get($data['detail']->ic_id, 'meta_addon_css');
$data['meta_addon_js'] = $this->InfoMetas_model->get($data['detail']->ic_id, 'meta_addon_js');
$data['meta_addon_picture'] = $this->InfoMetas_model->get($data['detail']->ic_id, 'meta_addon_picture');
//print_r($data);die();
$this->load->view('header', $data);
$this->load->view('information_' . $data['detail']->ic_template);
$this->load->view('footer');
if ($this->input->get_post('no_cache')) {
//不触发缓存生成否则影响AMP生成速度这个主要是给自动转换AMP用的
} else {
$this->output->cache(99999);
}
}
//后面这串是密码,防止爬虫程序扫到
//删除缓存文件比如页面不在发布或者修改了URL等情况
public function delete_cache_8X913mksJ()
{
$url = $this->input->get_post('static_html_url');
if (empty($url)) {
$this->output->set_status_header(404);
return false;
}
$cache_path = 'd:/Dropbox/wwwcache/asiahighlights.com';
if (!is_dir($cache_path) OR !is_really_writable($cache_path)) {
log_message('error', "Unable to write cache file: " . $cache_path);
$this->output->set_status_header(404);
return false;
}
$cache_path = $cache_path . $url;
if (mb_substr($cache_path, -1, 1) == '/') {
$cache_path .= 'index.htm';
}
//如果文件存在,先判断是否为缓存文件,防止覆盖原始程序文件
if (file_exists($cache_path)) {
if (!$fp_read = @fopen($cache_path, FOPEN_READ)) {
$this->output->set_status_header(404);
return FALSE;
}
flock($fp_read, LOCK_SH);
$cache = '';
if (filesize($cache_path) > 0) {
$cache = fread($fp_read, filesize($cache_path));
}
flock($fp_read, LOCK_UN);
fclose($fp_read);
if (strpos($cache, '<!-- Generated by ') === false) {
log_message('error', "is not cache file." . $cache_path);
$this->output->set_status_header(404);
return FALSE;
} else {
if (unlink($cache_path)) {
unlink($cache_path . '.mobile.htm');//删除移动端文件
if (file_exists($cache_path . '.amp.htm')) {
unlink($cache_path . '.amp.htm');//删除amp文件
}
echo 'ok';
return TRUE;
} else {
$this->output->set_status_header(404);
return FALSE;
}
}
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */