一个做页面静态化的php类_PHP教程
一个做页面静态化的php类
<?php namespace Common; /* * * 功能:页面静态化的创建和删除 * 创建:当且仅当,一个页面需要被静态化并且还未静态化时。 * 删除:当且仅当,一个页面存在静态化页面并且需要被重新静态化时。 * * 作者:郭军周 * * 注 :本类基于ThinkPHP3.2,或者其他具有“单一入口且MVC模式”的其他php框架。 * * 使用方式:在Controller的构造方法中获取其对象;在Controller的销毁方法里,用其对象的_static方法。 * 例:XXXController extends BaseController. * BaseController: * function __construct(){ * $this->__sh = StaticHtml::getInstance(); * } * function __destruct(){ * $this->__sh->_static(); * } * * */ class StaticHtml{ private static $_instance = null; /* 单例模式,自身的引用 */ private $_needStatic = false; /* 是否需要将其静态化 */ private $_needDeleteStatic = false; /* 是否需要删除其静态化的页面 */ private $_hasStaticed = true; /* 是否存在其的静态化页面 */ private $_controller = null; /* 当前被访问的controller */ private $_action = null; /* 当前被访问的action */ // private $_staticAgain = false; /* 删除静态文件后,是否马上重新更新【【注意】再次请求】 */ private $_save_path = null; /* 将要创建或者删除的静态文件的路径 */ private $_conf = array( /* 此文件定义一些静态文件的存放方式 */ 'files_per_directory' => 100 /* 此值不允许被修改,除非是要删除所有已经存在的静态文件,重新缓存 */ ); private $_staticList = array( /* 此数组,定义了需要创建静态化页面的Controller的action */ // 'Base' => array( /* Base为controller name */ // 'aaa' => array( /* aaa为action name */ // 'save_path' => '/StaticHtml/Base/aaa/', /* save_path为生成的静态文件存放的根路径 */ // 'static_base' => 'id', /* static_base为生成静态文件的“依据”。建议为对应数据库的primary_key */ // 'alias' => 'aaa' /* 静态文件的名字,否则为1.html */ // ) // ) 'Mynotes' => array( 'look_notes' => array( 'save_path' => '/StaticHtml/Mynotes/look_notes/', 'static_base' => 'id', 'alias' => 'note' ), 'add_personal_notes' => array( 'save_path' => '/StaticHtml/Mynotes/', 'alias' => 'note-add' ) ), 'Resource' => array( 'allResource' => array( 'save_path' => '/StaticHtml/Resource/', 'alias' => 'allResource' ), 'resource_add' => array( 'save_path' => '/StaticHtml/Resource/', 'alias' => 'resourceAdd' ) ), 'Thing' => array( 'suggestion_of_lecture' => array( 'save_path' => '/StaticHtml/Lecture/', 'alias' => 'voteLecture' ) ), 'Passwordfix' => array( 'index' => array( 'save_path' => '/StaticHtml/Information/', 'alias' => 'updatePassword' ) ), 'Information' => array( 'index' => array( 'save_path' => '/StaticHtml/Information/', 'static_base' => 'user_id', 'alias' => 'information' ) ), 'Courseinfo' => array( 'course_show' => array( 'save_path' => '/StaticHtml/Information/', 'static_base' => 'user_id', 'alias' => 'course' ) ) ); private $_deleteList = array( /* 此数组,定义了需要删除某些静态化页面的Controller的action */ // 'Base' => array( /* Base为controller name */ // 'bbb' => array( /* bbb为action name */ // 'save_path' => '/StaticHtml/Base/aaa/', /* save_path为要删除的静态文件存放的根路径 */ // 'static_base' => 'id', /* static_base为确定静态文件路径的“依据”。建议为对应数据库的primary_key */ // 'alias' => 'aaa' /* 静态文件的名字,否则为1.html */ // ) // ) 'Mynotes' => array( 'edits_notes' => array( 'save_path' => '/StaticHtml/Mynotes/look_notes/', 'static_base' => 'id', 'alias' => 'note' ) ), 'Information' => array( 'save_user_info' => array( 'save_path' => '/StaticHtml/Information/', 'static_base' => 'user_id', 'alias' => 'information' ) ), 'Courseinfo' => array( 'course_update' => array( 'save_path' => '/StaticHtml/Information/', 'static_base' => 'user_id', 'alias' => 'course' ) ) ); private function __construct(){ $this->needStatic(); /* 确定本次请求是否需要静态化 */ $this->hasStaticed(); /* 确定本次请求是否已经存在静态化页面 */ $this->needDeleteStatic(); /* 确定本次请求是否需要删除某些静态页面 */ } /* 确定需要删除的静态文件的存放路径 */ private function needDeleteStatic(){ if($this->_needDeleteStatic){ $save_path = $this->getSavePath($this->_deleteList[$this->_controller][$this->_action]); $this->_hasStaticed = false; if(file_exists(ROOT_PATH.$save_path)){ $this->_hasStaticed = true; } // $this->_staticAgain = $this->_deleteList[$this->_controller][$this->_action]['visitAgain']; $this->_save_path = ROOT_PATH.$save_path; } } /* 获取本类的,唯一的,实例化 */ public static function getInstance(){ if(!(self::$_instance instanceof self)){ self::$_instance = new self(); } return self::$_instance; } /* 判断是否存在其静态化的文件 */ private function hasStaticed(){ if($this->_needStatic){ $save_path = $this->getSavePath($this->_staticList[$this->_controller][$this->_action]); if(!file_exists(ROOT_PATH.$save_path)){ $this->_hasStaticed = false; ob_start(); }else{ header("location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']).$save_path); } $this->_save_path = ROOT_PATH.$save_path; } } /* 获取本次请求要生成或者删除的,静态化文件的路径 */ private function getSavePath($conf){ if(!isset($conf['static_base'])){ $save_path = $conf['save_path']; $save_path .= $conf['alias'].'.html'; }else{ if($conf['static_base'] == 'user_id'){ $id = (int)$_SESSION['logined_user']['id']; }else{ if(IS_GET){ $id = $_GET[$conf['static_base']]; }else{ $id = $_POST[$conf['static_base']]; } } $save_path = $conf['save_path']; $directory_id = ceil($id/$this->_conf['files_per_directory']); $save_path .= $directory_id.'/'; if($conf['alias']){ $fileName = $conf['alias'].'-'; } $fileName .= $id.'.html'; $save_path .= $fileName; } return $save_path; } /* 确定本次请求,是否需要生成静态化文件 */ private function needStatic(){ $url = explode('/',__ACTION__); $this->_controller = $url[4]; $this->_action = $url[5]; if(isset($this->_staticList[$this->_controller]) && isset($this->_staticList[$this->_controller][$this->_action])){ $this->_needStatic = true; } if(isset($this->_deleteList[$this->_controller]) && isset($this->_deleteList[$this->_controller][$this->_action])){ $this->_needDeleteStatic = true; } } /* 生成,或者删除,静态化文件 */ public function _static(){ if($this->_needStatic && !$this->_hasStaticed){ $html = ob_get_contents(); $this->_mkdir(dirname($this->_save_path)); file_put_contents($this->_save_path,$html); } if($this->_needDeleteStatic && $this->_hasStaticed){ unlink($this->_save_path); /*if($this->_staticAgain){ header("location: http://www.baidu.com"); // header("location: http://".$_SERVER['HTTP_HOST'].'/'.$_SERVER['REQUEST_URI']); }*/ } } /* 创建目录 */ private function _mkdir($path){ if (!file_exists($path)){ $this->_mkdir(dirname($path)); mkdir($path, 0777); } } } ?>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

是否要复制MicrosoftWord中的页面,并保持格式不变?这是一个聪明的想法,因为当您想要创建特定文档布局或格式的多个副本时,在Word中复制页面可能是一种有用的节省时间的技术。本指南将逐步引导您在Word中复制页面的过程,无论是创建模板还是复制文档中的特定页面。这些简单的说明旨在帮助您轻松地重新制作页面,省去从头开始的麻烦。为什么要在MicrosoftWord中复制页面?在Word中复制页面非常有益的原因有以下几点:当您有一个具有特定布局或格式的文档要复制时。与从头开始重新创建整个页面不同

待机是iOS17更新中的一项新功能,它提供了一种新的增强方式,可以在手机快速闲置时访问信息。通过StandBy,您可以方便地查看时间、查看即将发生的事件、浏览日历、获取您所在位置的天气更新等等。激活后,iPhone在充电时设置为横向时会直观地进入待机模式。此功能非常适合床头柜等无线充电点,或者在日常任务中离开iPhone充电时。它允许您轻扫待机中显示的各种小部件,以访问来自各种应用程序的不同信息集。但是,您可能希望根据您的偏好和您经常需要的信息修改这些小部件,甚至删除一些小部件。因此,让我们深入

页面刷新在我们日常的网络使用中非常常见,当我们访问一个网页后,有时候会遇到一些问题,比如网页加载不出来或者显示不正常等。这时候我们通常会选择刷新页面来解决问题,那么如何快速地刷新页面呢?下面我们就来探讨一下页面刷新的快捷键。页面刷新快捷键是一种通过键盘操作来快速刷新当前网页的方法。在不同的操作系统和浏览器中,页面刷新的快捷键可能有所不同。下面我们以常见的W

在iOS中,Apple允许您禁用iPhone上的单个主屏幕页面。还可以重新排列主屏幕页面的顺序,并直接删除页面,而不仅仅是禁用它们。这是它的工作原理。如何重新排列主屏幕页面触摸并按住主屏幕上的空格可进入抖动模式。轻点代表主屏幕页面的圆点行。在显示的主屏幕网格中,轻触并拖动页面以将其相对于其他页面重新排列。其他人会移动以响应您的拖拽动作。当您对新排列感到满意时,点击屏幕右上角的“完成”,然后再次点击“完成”以退出抖动模式。如何禁用或删除主屏幕页面触摸并按住主屏幕上的空格可进入抖动模式。轻点代表主屏

标题:3秒跳转页面实现方法:PHP编程指南在网页开发中,页面跳转是常见的操作,一般情况下我们使用HTML中的meta标签或者JavaScript的方法进行页面跳转。不过,在某些特定的情况下,我们需要在服务器端进行页面跳转。本文将介绍如何使用PHP编程实现一个在3秒内自动跳转到指定页面的功能,同时会给出具体的代码示例。PHP实现页面跳转的基本原理PHP是一种在

《处理Laravel页面无法正确显示CSS的方法,需要具体代码示例》在使用Laravel框架开发Web应用时,有时候会遇到页面无法正确显示CSS样式的问题,这可能会导致页面呈现不正常的样式,影响用户体验。本文将介绍一些处理Laravel页面无法正确显示CSS的方法,并提供具体的代码示例,帮助开发者解决这一常见问题。一、检查文件路径首先要检查CSS文件的路径是

深入解析C语言中static关键字的作用和用法在C语言中,static是一种非常重要的关键字,它可以被用于函数、变量和数据类型的定义上。使用static关键字可以改变对象的链接属性、作用域和生命周期,下面就来详细地解析一下static关键字在C语言中的作用和用法。static变量和函数:在函数内部使用static关键字定义的变量称为静态变量,它具有全局生命周

随着互联网的日益发展,许多网站或应用也逐渐变得复杂。当用户在使用时,时常会遇到错误页面,其中最常见的就是404页面。404页面指访问的页面不存在,是常见的错误页面。而对于网站或应用来说,一个漂亮的404页面能极大提升用户体验。在本文中,我们将会介绍如何利用ThinkPHP6快速实现一个漂亮的404页面。创建路由首先,我们需要在route文件夹中创建一个err
