|
|
|
@ -3,24 +3,25 @@
|
|
|
|
|
//加载第三方用于解析html的类
|
|
|
|
|
require '/lib/simple_html_dom.php';
|
|
|
|
|
|
|
|
|
|
if (!defined('BASEPATH'))
|
|
|
|
|
exit('No direct script access allowed');
|
|
|
|
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
|
|
|
|
|
|
class MY_Output extends CI_Output {
|
|
|
|
|
class MY_Output extends CI_Output
|
|
|
|
|
{
|
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Write a Cache File
|
|
|
|
|
*
|
|
|
|
|
* @access public
|
|
|
|
|
* @param string
|
|
|
|
|
* @return void
|
|
|
|
|
* @access public
|
|
|
|
|
* @param string
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
function _write_cache($output) {
|
|
|
|
|
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)) {
|
|
|
|
|
if (!is_dir($cache_path) OR !is_really_writable($cache_path)) {
|
|
|
|
|
log_message('error', "Unable to write cache file: " . $cache_path);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -32,7 +33,7 @@ class MY_Output extends CI_Output {
|
|
|
|
|
}
|
|
|
|
|
$cache_path = $cache_path . $_GET['static_html_url'];
|
|
|
|
|
if (mb_substr($cache_path, -1, 1) == '/') {
|
|
|
|
|
$cache_path.='index.htm';
|
|
|
|
|
$cache_path .= 'index.htm';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->create_folder_by_path(dirname($cache_path));
|
|
|
|
@ -75,8 +76,8 @@ class MY_Output extends CI_Output {
|
|
|
|
|
$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);
|
|
|
|
|
$time_mark = time();//添加时间戳,用来更新CDN
|
|
|
|
|
$output = str_replace('##DEFERSCRIPTDEFER##', 'https://data.asiahighlights.com/optimizejs' . $output_js_name . '?' . $time_mark, $output);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -89,11 +90,11 @@ class MY_Output extends CI_Output {
|
|
|
|
|
//替换图片地址,用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) {
|
|
|
|
|
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图片不需要懒加载
|
|
|
|
|
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";
|
|
|
|
@ -109,7 +110,7 @@ class MY_Output extends CI_Output {
|
|
|
|
|
|
|
|
|
|
//生成移动端用小图
|
|
|
|
|
foreach ($html_object->find('img') as $image) {
|
|
|
|
|
if(substr($image->originalsrc,-4)=='.jpg'){//只有jpg可以处理
|
|
|
|
|
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;
|
|
|
|
@ -120,107 +121,7 @@ class MY_Output extends CI_Output {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////// 生成AMP版本
|
|
|
|
|
///
|
|
|
|
|
//用移动端版本生成
|
|
|
|
|
/*
|
|
|
|
|
1.加载站点AMP模板,模板只有导航、头部、底部
|
|
|
|
|
2.删除全部js引用和内链代码
|
|
|
|
|
3.删除全部css引用,内联css放入<style amp-custom>
|
|
|
|
|
4.图片全部替换成amp-img,设置宽高,设置layout="responsive"
|
|
|
|
|
5.去掉所有元素中的style
|
|
|
|
|
6.去掉样式表中的!important
|
|
|
|
|
7.替换读取源文件title description keywords canonical
|
|
|
|
|
8.todo:增加application/ld+json
|
|
|
|
|
*/
|
|
|
|
|
if (!empty($_GET['amp_optimize'])) {//生成AMP版本
|
|
|
|
|
|
|
|
|
|
//当前文件夹下的AMP模板
|
|
|
|
|
$amp_template=file_get_contents(dirname(__FILE__).'/amp-template.html');
|
|
|
|
|
|
|
|
|
|
foreach ($html_object->find('title') as $title) {
|
|
|
|
|
$amp_template = str_replace('<!--@TITLE@-->', $title->innertext, $amp_template);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($html_object->find('meta') as $meta) {
|
|
|
|
|
if($meta->name=='description'){
|
|
|
|
|
$amp_template = str_replace('<!--@DESCRIPTION@-->', $meta->content, $amp_template);
|
|
|
|
|
}
|
|
|
|
|
if($meta->name=='keywords'){
|
|
|
|
|
$amp_template = str_replace('<!--@KEYWORDS@-->', $meta->content, $amp_template);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($html_object->find('script') as $script) {
|
|
|
|
|
$script->outertext = '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($html_object->find('link') as $link) {
|
|
|
|
|
if ($link->rel == 'stylesheet' && !empty($link->href)) {
|
|
|
|
|
$link->outertext = '';
|
|
|
|
|
}
|
|
|
|
|
if ($link->rel == 'canonical' && !empty($link->href)) {
|
|
|
|
|
$amp_template = str_replace('<!--@CANONICAL@-->', $link->href, $amp_template);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$style_content = '';
|
|
|
|
|
foreach ($html_object->find('style') as $style) {
|
|
|
|
|
$style_content .= $style->innertext;
|
|
|
|
|
$style->outertext = '';
|
|
|
|
|
}
|
|
|
|
|
$style_content = str_replace('!important', '', $style_content);
|
|
|
|
|
$amp_template = str_replace('/*@CUSTOM-CSS@*/', $style_content, $amp_template);
|
|
|
|
|
|
|
|
|
|
//获取图片尺寸,AMP要求必须填写width和height
|
|
|
|
|
|
|
|
|
|
//拼接请求的图片url,如 https://data.asiahighlights.com/imagesize.php?photo=/pic/logo-ah.png,/pic/ah-slide-logo.png
|
|
|
|
|
$request_size=array();
|
|
|
|
|
foreach ($html_object->find('img') as $image) {
|
|
|
|
|
$img_src = $image->src;
|
|
|
|
|
if (!empty($image->originalsrc)) {
|
|
|
|
|
$img_src = $image->originalsrc;
|
|
|
|
|
}
|
|
|
|
|
$request_size[] = str_replace('https://data.asiahighlights.com', '', $img_src);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//请求图片尺寸
|
|
|
|
|
$image_sizes=array();
|
|
|
|
|
$parse_url='https://data.asiahighlights.com/imagesize.php?photo='.implode(',',$request_size);
|
|
|
|
|
$size_data=GET_HTTP($parse_url);
|
|
|
|
|
if(!empty($size_data)){
|
|
|
|
|
$size_data=json_decode($size_data);
|
|
|
|
|
foreach ($size_data as $item){
|
|
|
|
|
$item->photo='https://data.asiahighlights.com'.$item->photo;
|
|
|
|
|
$image_sizes[$item->photo]=$item;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//获取图片尺寸 end
|
|
|
|
|
foreach ($html_object->find('img') as $image) {
|
|
|
|
|
$img_src = $image->src;
|
|
|
|
|
if (!empty($image->originalsrc)) {
|
|
|
|
|
$img_src = $image->originalsrc;
|
|
|
|
|
}
|
|
|
|
|
$img_alt = $image->alt;
|
|
|
|
|
$img_class = $image->class;
|
|
|
|
|
$img_size=$image_sizes[$img_src];
|
|
|
|
|
if(!empty($img_size)){
|
|
|
|
|
$image->outertext = " <amp-img layout=\"responsive\" class=\"{$img_class}\" alt=\"{$img_alt}\" src=\"{$img_src}\" width=\"{$img_size->width}\" height=\"{$img_size->height}\"></amp-img>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($html_object->find('#content_main') as $content_main) {
|
|
|
|
|
$amp_template = str_replace('<!--@CUSTOM-CONENT@-->', $content_main, $amp_template);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//替换掉写在组件上的样式
|
|
|
|
|
$amp_template = preg_replace('/style=.+?[\'|"]/i', '', $amp_template);
|
|
|
|
|
|
|
|
|
|
file_put_contents($cache_path . '.amp.htm',$amp_template);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
////// 生成AMP版本 end
|
|
|
|
|
|
|
|
|
|
if (flock($fp, LOCK_EX)) {
|
|
|
|
|
fwrite($fp, $output . '<!-- Generated by ' . $_SERVER['HTTP_HOST'] . ' (' . date('c') . ') -->');
|
|
|
|
@ -240,11 +141,14 @@ class MY_Output extends CI_Output {
|
|
|
|
|
/*
|
|
|
|
|
* 递归创建文件夹
|
|
|
|
|
*/
|
|
|
|
|
function create_folder_by_path($dir, $mode = 0777) {
|
|
|
|
|
function create_folder_by_path($dir, $mode = 0777)
|
|
|
|
|
{
|
|
|
|
|
if (!is_dir($dir)) {
|
|
|
|
|
return @mkdir($dir, $mode, true);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|