ThinkPHP——静态化

327 阅读1分钟

静态 tp5 真实静态 ThinkPHP tp

框架外静态生成学习

1、开启缓存 ob_start

ob_start();

2、获取内容

echo 12355554; 

3、写入文件并关闭缓存

file_put_contents("./zz.html",ob_get_clean());

静态文件触发方式,

1、设置缓存时间,超过时间的重新生成(判断文件是否存在和最后修改时间如:if(is_file(路径)&&-filemtime(路径)))
2、手动后台触发
3、内容自动定时扫描(定时任务) 

tp5视图类目录 /thinkphp/library/think/View.php

参考网站:my.oschina.net/u/2456768/b…

  1. 根据模块控制器自动递归创建目录。
  2. file_exists判断生成的静态页是否存在
  3. 或判断过期与否,存在重定向到静态网页
  4. file_put_contents($file,$content)函数生成页面。
1. 目录的创建
/*
 * 递归创建目录
 * @param string $dir 文件目录路径
 * @return boolean 创建结果
 * **/
function mkdirs($dir)
{
    if(!is_dir($dir))
    {
        if(!mkdirs(dirname($dir))){
            return false;
        }
        if(!mkdir($dir,0777)){
            return false;
        }
    }
    return true;
}
  1. 在基类中初始化需创建的目录
protected $staticHtmlDir = "";              //静态模板生成目录
protected $staticHtmlFile = "";             //静态文件
protected function _initialize() {
      parent::_initialize();
      $this->staticHtmlDir = "html".DS.$this->request->controller().DS;
      }
  1. 基类中的生成前与生成后的方法。
//判断是否存在静态
public function beforeBuild($param) {
        //生成静态
        //$baseDir = "html".DS.$this->request->controller().DS;
        if(is_array($param)) {
            $param = implode("_",$param);
        }
        $this->staticHtmlFile = $this->staticHtmlDir.$this->request->action().($param?$param:'').'.html';
        //创建目录mkdirs()
        if(mkdirs($this->staticHtmlDir)) {
        //<!-- file_exists() 函数检查文件或目录是否存在-->
       // <!--filectime() 函数返回指定文件的上次 inode 修改时间。-->
       //<!--判断目录是否存在和根据时间判断是否过期-->
            if(file_exists($this->staticHtmlFile) && filectime($this->staticHtmlFile)>=time()-60*60*24*5) {                
               //  <!--静态文件存在-->
               // <!--redirect方法可以实现页面的重定向功能。-->
                $this->redirect('/'.$this->staticHtmlFile);
            }
        }
    }
//开始生成静态文件
public function afterBuild($html) {
        //<!--判断文件目录是否为空和代码是否为空-->
        if(!empty($this->staticHtmlFile) && !empty($html)) {
          //<!-- file_exists() 函数检查文件或目录是否存在-->
            if(file_exists($this->staticHtmlFile)) {
                //  <!--unlink() 函数删除文件。-->
                unlinnk($this->staticHtmlFile);
            }
            //<!--file_put_contents创建并写入文件-->
            if(file_put_contents($this->staticHtmlFile,$html)) { 
               // <!--redirect方法可以实现页面的重定向功能。-->
                $this->redirect('/'.$this->staticHtmlFile);
            }
        }
    }
  1. 视图控制器中的使用。
       //对静态模板进行判断
       $this->beforeBuild(array($cid,$page));
复制代码
替换渲染页代码成下面代码
 //获取html
      $html =$this->fetch();
        //生成静态
       $this->afterBuild($html)