|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
//加载第三方用于解析html的类
|
|
|
|
|
require '/lib/simple_html_dom.php';
|
|
|
|
|
|
|
|
|
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
|
|
|
|
|
|
class MY_Output extends CI_Output
|
|
|
|
|
{
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Write a Cache File
|
|
|
|
|
*
|
|
|
|
|
* @access public
|
|
|
|
|
* @param string
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
function _write_cache($output)
|
|
|
|
|
{
|
|
|
|
|
$cache_path = 'd:/Dropbox/wwwcache/asiahighlights.com';
|
|
|
|
|
$optimize_js_path = 'd:/Dropbox/wwwcache/asiahighlights.com/js';
|
|
|
|
|
|
|
|
|
|
if (!is_dir($cache_path) OR !is_really_writable($cache_path)) {
|
|
|
|
|
log_message('error', "Unable to write cache file: " . $cache_path);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///////改成按照URL保存缓存
|
|
|
|
|
//优先使用提交过来的static_html_url做文件名,这是主动生成静态文件用的参数
|
|
|
|
|
if (empty($_GET['static_html_url'])) {
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
$cache_path = $cache_path . $_GET['static_html_url'];
|
|
|
|
|
if (mb_substr($cache_path, -1, 1) == '/') {
|
|
|
|
|
$cache_path .= 'index.htm';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->create_folder_by_path(dirname($cache_path));
|
|
|
|
|
|
|
|
|
|
//如果文件存在,先判断是否为缓存文件,防止覆盖原始程序文件
|
|
|
|
|
if (@file_exists($cache_path) && filesize($cache_path) > 0) {
|
|
|
|
|
if (!$fp_read = @fopen($cache_path, FOPEN_READ)) {
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
flock($fp_read, LOCK_SH);
|
|
|
|
|
|
|
|
|
|
$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);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///////
|
|
|
|
|
|
|
|
|
|
if (!$fp = @fopen($cache_path, FOPEN_WRITE_CREATE_DESTRUCTIVE)) {
|
|
|
|
|
log_message('error', "Unable to write cache file: " . $cache_path);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//精简html和css代码
|
|
|
|
|
if (!empty($_GET['static_html_optimize'])) {//设置优化开关,暂时手动优化
|
|
|
|
|
$optimize_html = $_GET['static_html_optimize'];
|
|
|
|
|
if ($optimize_html === 'comeon') {
|
|
|
|
|
$clean_html = GET_HTTP('https://cht.mycht.cn/info.php/apps/htmlcompressor/index/optimize', 'websitehost=' . urlencode('https://data.asiahighlights.com') . '&htmlsource=' . urlencode($output), 'POST');
|
|
|
|
|
//$clean_html = GET_HTTP('http://202.103.68.110:8001/info.php/apps/htmlcompressor/index/optimize', 'websitehost=' . urlencode('https://data.asiahighlights.com') . '&htmlsource=' . urlencode($output), 'POST');
|
|
|
|
|
if (!empty($clean_html)) {
|
|
|
|
|
$clean_html_object = json_decode($clean_html);
|
|
|
|
|
if (!empty($clean_html_object) && $clean_html_object->result == 'ok') {
|
|
|
|
|
$output = $clean_html_object->data->html_object;
|
|
|
|
|
$output_js = $clean_html_object->data->js_content;
|
|
|
|
|
$output_js_name = '/' . md5($cache_path) . '.js';
|
|
|
|
|
file_put_contents($optimize_js_path . $output_js_name, $output_js);
|
|
|
|
|
$time_mark = time();//添加时间戳,用来更新CDN
|
|
|
|
|
$output = str_replace('##DEFERSCRIPTDEFER##', 'https://data.asiahighlights.com/optimizejs' . $output_js_name . '?' . $time_mark, $output);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//解析html,生成不同版本的静态文件
|
|
|
|
|
|
|
|
|
|
$html_object = str_get_html($output);
|
|
|
|
|
if (!empty($html_object)) {
|
|
|
|
|
|
|
|
|
|
//替换图片地址,用CDN分发
|
|
|
|
|
foreach ($html_object->find('img') as $image) {
|
|
|
|
|
if (strpos($image->src, 'https://data.asiahighlights.com/') === false) {//当查找的字符串在开始位置则返回0,所以一定要写===false
|
|
|
|
|
if (strpos($image->src, '/pic/') !== false || strpos($image->src, '/image/') !== false) {
|
|
|
|
|
$image->src = 'https://data.asiahighlights.com' . $image->src;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (empty($image->loader) || $image->loader !== "nolazy") {//如果没有禁止懒加载的标识符,则给图片添加懒加载。一般首页logo和banner图片不需要懒加载
|
|
|
|
|
$image->originalsrc = $image->src;
|
|
|
|
|
$image->loader = "lazy";
|
|
|
|
|
$image->src = "https://data.asiahighlights.com/image/grey.gif";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//保存PC端代码
|
|
|
|
|
$output = $html_object->save();
|
|
|
|
|
|
|
|
|
|
//生成移动版本
|
|
|
|
|
foreach ($html_object->find('.hidden-xs') as $hidden_item) {
|
|
|
|
|
$hidden_item->outertext = '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//生成移动端用小图
|
|
|
|
|
foreach ($html_object->find('img') as $image) {
|
|
|
|
|
if (substr($image->originalsrc, -4) == '.jpg') {//只有jpg可以处理
|
|
|
|
|
if (strpos($image->originalsrc, 'https://data.asiahighlights.com/') !== false) {//当查找的字符串在开始位置则返回0,所以一定要写===false
|
|
|
|
|
$source_image = str_replace('https://data.asiahighlights.com', '', $image->originalsrc); //原始图片URL
|
|
|
|
|
$image->originalsrc = 'https://data.asiahighlights.com/mobile' . $source_image;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$html_object->save($cache_path . '.mobile.htm');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (flock($fp, LOCK_EX)) {
|
|
|
|
|
fwrite($fp, $output . '<!-- Generated by ' . $_SERVER['HTTP_HOST'] . ' (' . date('c') . ') -->');
|
|
|
|
|
flock($fp, LOCK_UN);
|
|
|
|
|
} else {
|
|
|
|
|
log_message('error', "Unable to secure a file lock for file at: " . $cache_path);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
fclose($fp);
|
|
|
|
|
@chmod($cache_path, FILE_WRITE_MODE);
|
|
|
|
|
|
|
|
|
|
log_message('debug', "Cache file written: " . $cache_path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 递归创建文件夹
|
|
|
|
|
*/
|
|
|
|
|
function create_folder_by_path($dir, $mode = 0777)
|
|
|
|
|
{
|
|
|
|
|
if (!is_dir($dir)) {
|
|
|
|
|
return @mkdir($dir, $mode, true);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|