THINKPHP 生成真静态方法

1======================================简单的HTML生成处理=========== 2 public function html(){ 3       if(is_file("xinyou2.html")){ 4           echo "删除源文件中------<br/>"; 5           unlink("xinyou2.html"); 6       } 7        8       //在你的开始处加入ob_start(); 9    ob_start(); 10      11    $this->display('index'); 12    $temp=ob_get_contents(); 13    ob_end_clean(); 14      15    //写入文件 16    $fp=fopen("./xinyou2.html",'w'); 17    fwrite($fp,$temp) or die('写文件错误');  18    echo "生成成功";  19   } 20========================================================================= 21 22 23 protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') { 24        $content = $this->fetch($templateFile); 25        $htmlpath   = !empty($htmlpath)?$htmlpath:HTML_PATH; 26        $htmlfile =  $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX'); 27        if(!is_dir(dirname($htmlfile))) 28            // 如果静态目录不存在 则创建 29            mk_dir(dirname($htmlfile)); 30        if(false === file_put_contents($htmlfile,$content)) 31            throw_exception(L('_CACHE_WRITE_ERROR_').':'.$htmlfile); 32        return $content; 33    } 34$this->buildHtml('静态文件', '静态路径','模板文件'); 35  36    37  参数一:静态文件,是指生成后的静态文件名,文件保存路径完整的就是:静态路径/静态文件。例如静态文件设置a/index.那么保存的路径就是项 38目路径/Html/a/index.html(默认的静态路径在项目路径的Html文件夹下,没有可以自己创建) 39参数二:静态路径,上面已经说明了默认的路径,3.0中可以在入口文件里加入参数来更改静态路径。 40define(HTML_PATH, ‘./);(将静态路径义为网站根目录) 41参数三:模板文件,我感觉官方这个描述是不正确的,准确的来说应该是目标模块,就是需要生成静态文件的模块。格式:模块名:操作。比如要生成Index下的a方法为静态文件,那就是Index:a。如果为空则默认生成当前操作的静态文件。 42生成静态页,我们要选择一个静态模板页,静态化网页的原理也就是替换模板中的变量,所以我们要把需要替换的变量的值获取出来,比如 43$this->assign ( 'webname', $websites ['name'] );$this->assign ( 'siteid', $siteid );$this->assign ( 'type', $type );$this->assign ( 'header', $websites ['templatedirectory'] . '@Public_header' );$this->assign ( 'footer', $websites ['templatedirectory'] . '@Public_footer' ); 44     45静态模板页有相应的{$header},{$footer}等,使用buildHtml方法后,就把这些变量给替换掉了。是不是很简单。 46 47 48 49<?php 50require("smarty/Smarty.class.php"); 51$t = new Smarty; 52$t->assign("title","Hello World!"); 53$content = $t->fetch("templates/index.htm"); 54//这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了 55$fp = fopen("archives/2005/05/19/0001.html", "w"); 56fwrite($fp, $content); 57fclose($fp); 58?> 59 60 61 62<?php 63ob_start(); 64echo "Hello World!"; 65$content = ob_get_contents();//取得php页面输出的全部内容 66$fp = fopen("archives/2005/05/19/0001.html", "w"); 67fwrite($fp, $content); 68fclose($fp); 69?> 70 71 72 73ob_start():开始“捕捉”缓存 也就是从这里开始 打开浏览器的缓存 74ob_end_flush():关闭浏览器缓存 75ob_get_content():读取缓存内容 76fopen(”文件路径”,”打开模式”)打开文件 这个函数的打开模式有好几种 下面介绍几种主要的模式: 77“r” 只读方式打开,将文件指针指向文件头。 78“r+” 读写方式打开,将文件指针指向文件头。 79“w” 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 80“w+” 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 81fwrite(”文件名称”,”写入内容”) 写入文件 82fclose() 关闭文件 83 84 85 86<?php 87ob_start();//打开浏览器缓存 88  89//下面是读取xml数据 90$parser = xml_parser_cr&#101;ate(); //创建一个parser编辑器 91xml_set_element_handler($parser, "startElement", "endElement");//设立标签触发时的相应函数 这里分别为startElement和endElenment 92xml_set_character_data_handler($parser, "characterData");//设立数据读取时的相应函数 93$xml_file="1.xml";//指定所要读取的xml文件,可以是url 94$filehandler = fopen($xml_file, "r");//打开文件 95  96  97while ($data = fread($filehandler, 4096))  98{ 99xml_parse($parser, $data, feof($filehandler)); 100}//每次取出4096个字节进行处理 101  102fclose($filehandler); 103xml_parser_free($parser);//关闭和释放parser解析器 104  105  106$name=false; 107$position=false; 108function startElement($parser_instance, $element_name, $attrs) //起始标签事件的函数 109{ 110global $name,$position; 111if($element_name=="NAME") 112{ 113$name=true; 114$position=false; 115echo "名字:"; 116} 117if($element_name=="POSITION") 118{$name=false; 119$position=true; 120echo "职位:"; 121} 122} 123  124function characterData($parser_instance, $xml_data) //读取数据时的函数 125{ 126global $name,$position; 127if($position) 128echo $xml_data."<br />"; 129if($name) 130echo $xml_data."<br />"; 131} 132  133function endElement($parser_instance, $element_name) //结束标签事件的函数 134{ 135global $name,$position; 136$name=false; 137$position=false; 138} 139//xml数据读取完毕 140  141$htmlname=$id.".html";//$id可以自己定义 这里代表用户传来的id 142$htmlpath="archives/".$htmlname; //设置路径变量 143$content = ob_get_contents();//取得php页面输出的全部内容 144$fp = fopen($htmlpath, "w"); 145fwrite($fp, $content); 146fclose($fp); 147?>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )