版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
php生成静态:PHP生成静态页疯狂代码http://CrazyCoder.cn/.:http:/CrazyCoder。cn/Php/Article21937.htmlPHP生成静态页看到很多伴侣在各个地方发帖问PHP生成静态文章系统的方法,以前曾做过这样一个系统,遂谈些看法,以供各位参考.好了,我们先回顾一些基本的概念。一,PHP脚本与动态页面.PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合,也可以类,函数封装等形式,以模板的方式对用户恳求进行处理.无论以何种方式,它的基本原理是这样的。由客户端提出恳求,恳求某一页面--—-->WEB服务器引入指定相应脚本进行处理--—-->脚本被载入服务器—--——>由服务器指定的PHP解析器对脚本进行解析形成HTML语言形式—--—〉将解析后的HTML语句以包的方式传回给扫瞄器。由此不难看出,在页面发送到扫瞄器后,PHP就不存在了,已被转化解析为HTML语句。客户恳求为一动态文件,事实上并没有真正的文件存在在那里,是PHP解析而成相对应的页面,然后发送回扫瞄器。这种页面处理方式被称为“动态页面"。二,静态页面。静态页面是指在服务器端确实存在的仅含HTML以及JS,CSS等客户端运行脚本的页面。它的处理方式是。由客户端提出恳求,恳求某一页面———-〉WEB服务器确认并载入某一页面--—->WEB服务器将该页面以包的形式传递回扫瞄器.由这一过程,我们对比一下动态页面,即可方现。动态页面需由WEB服务器的PHP解析器进行解析,而且通常还需连接数据库,进行数据库存取操作,然后才能形成HTML语言信息包;而静态页面,无须解析,无须连接数据库,直接发送,可大大减轻服务器压力,提高服务器负载能力,大幅供应页面打开速度和网站整体打开速度.但其缺点是,不能动态地对恳求进行处理,服务器上必须确实存在该文件.三,模板及模板解析。模板即尚未填充内容html文件.例如:temp.html〈HTML>〈TITLE>{title}</TITLE>〈BODY>thisisa{file}file'stemplets〈/BODY>〈/HTML〉ﻬPHP处理:templetest。php<?php$title=”落伍测试模板”;$file=”TwoMaxIntertesttemplet,〈br>author:Matrix@Two_Max”;$fp=fopen("temp.html”,"r");$content=fread($fp,filesize(”temp。html"));$content.=str_replace("{file}”,$file,$content);$content.=str_replace("{title}”,$title,$content);echo$content;?>模板解析处理,即将经PHP脚本解析处理后得出的结果填充(content)进模板的处理过程。通常借助于模板类。目前较流行的模板解析类有phplib,smarty,fastsmarty等等。模板解析处理的原理通常为替换。也有些程序员习惯将推断,循环等处理放进模板文件中,用解析类处理,典型应用为block概念,简洁来说即为一个循环处理。由PHP脚本指定循环次数,如何循环代入等,再由模板解析类简略实施这些操作.好了,对比过静态页面与动态页面各自的优劣,现在我们就来说说,如何用PHP生成静态文件。PHP生成静态页面并不是指PHP的动态解析,输出HTML页面,而是指用PHP创建HTML页面。同时由于HTML的不行写性,我们创建的HTML若有修改,则需删掉重新生成即可.(当然你也可以选择用正则进行修改,但个人认为那样做倒不如删掉重新生成来得快捷,有些得不偿失。)言归正传。用过PHP文件操作函数的PHPFANS知道,PHP中有一个文件操作函数fopen,即打开文件。若文件不存在,则尝试创建。这即是PHP可以用来创建HTML文件的理论基础。只要用来存放HTML文件的文件夹有写权限(即权限定义0777),即可创建文件。(针对UNIX系统而言,Win系统无须考虑。)仍以上例为例,若我们修改最后一句,并指定在test名目下生成一个名为test.html的静态文件:<?php$title="落伍测试模板";$file="TwoMaxIntertesttemplet,〈br>author:Matrix@Two_Max";$fp=fopen("temp.html",”r");
$content=fread($fp,filesize(”temp.html"));$content.=str_replace("{file}",$file,$content);$content。=str_replace("{title}",$title,$content);//echo$content;$filename="test/test.html";$handle=fopen($filename,"w");//打开文件指针,创建文件/*检查文件是否被创建且可写*/if(!is_writable($filename)){die(”文件:"。$filename."不行写,请检查其属性后重试!");}if(!fwrite($handle,$content)){//将信息写入文件die("生成文件"。$filename。"失败!");}fclose($handle);//关闭指针die(”创建文件".$filename。”成功!");?>实际应用中常见问题解决方案参考:一,文章列表问题:在数据库中创建字段,记录文件名,每生成一个文件,将自动生成的文件名存入数据库,对于推举文章,只需指向存放静态文件的指定文件夹中的该页面即可。利用PHP操作处理文章列表,存为字符串,生成页面时替换此字符串即可。如,在页面中放置文章列表的表格加入标记{articletable},而在PHP处理文件中:〈?php$title=”落伍测试模板";$file=”TwoMaxIntertesttemplet,<br〉author:Matrix@Two_Max";$fp=fopen("temp.html","r");$content=fread($fp,filesize(”temp。html”));$content.=str_replace("{file}”,$file,$content);$content.=str_replace(”{title}",$title,$content);//生成列表开头ﻬ$list=’';$sql="selectid,title,filenamefromarticle";$query=mysql_query($sql);while($result=mysql_fetch_array($query)){$list。='<ahref='.$root.$result['filename'].'target=_blank>'。$result['title'].'</a〉<br>’;}$content。=str_replace(”{articletable}”,$list,$content);//生成列表结束//echo$content;$filename="test/test.html”;$handle=fopen($filename,"w");//打开文件指针,创建文件/*检查文件是否被创建且可写*/if(!is_writable($filename)){die(”文件:".$filename."不行写,请检查其属性后重试!");}if(!fwrite($handle,$content)){//将信息写入文件die("生成文件”.$filename。"失败!");}fclose($handle);//关闭指针die(”创建文件”.$filename。”成功!");?〉二,分页问题。如我们指定分页时,每页20篇。某子频道列表内文章经数据库查询为45条,则,首先我们通过查询得到如下参数:1,总页数;2,每页篇数。其次步,for($i=0;$i<allpages;$i++),页面元素猎取,分析,文章生成,都在此循环中执行。不同的是,die("创建文件".$filename。”成功!";这句去掉,放到循环后的显示,因为该语句将中止程序执行。例:<?php$fp=fopen(”temp.html","r”);$content=fread($fp,filesize(”temp.html”));ﻬ$onepage='20';$sql="selectidfromarticlewherechannel=’$channelid’”;$query=mysql_query($sql);$num=mysql_num_rows($query);$allpages=ceil($num/$onepage);for($i=0;$i〈$allpages;$i++){if($i==0){$indexpath=”index。html";}else{$indexpath="index_"。$i."html";}$start=$i*$onepage;$list='';$sql_for_page="selectname,filename,titlefromarticlewherechannel=’$channelid’limit$start,$onepage";$query_for_page=mysql_query($sql_for_page);while($result=$query_for_page){$list.=’〈ahref='.$root。$result[’filename'].'target=_blank〉'.$title。’</a><br>';}$content=str_replace("{articletable}”,$list,$content);if(is_file($indexpath)){@unlink($indexpath);//若文件已存在,则删除}$handle=fopen($indexpath,”w”);//打开文件指针,创建文件/*检查文件是否被创建且可写*/if(!is_writable($indexpath)){echo"文件:".$indexpath。”不行写,请检查其属性后重试!";//修改为echo}if(!fwrite($handle,$content)){//将信息写入文件echo”生成文件”.$indexpath。"失败!";//修改为echo}fclose($handle);//关闭指针}fclose($fp);ﻬdie(”生成分页文件完成,如生成不完全,请检查文件权限系统后重新生成!");?>大致思路如此,其中如其它数据生成,数据输入输出检查,分页内容指向等可酌情在页面中加入。在实际文章系统处理过程当中,还有很多问题有待考虑,与动态页面不同之处,需注意的地方还有很多。但大致思路即是如此,其它方面可举一反三而得。Asp.NET生成静态页环境:Microsoft。NETFrameworkSDKv1.1OS:WindowsServer2003中文版ASP。Net生成静态HTML页在Asp中实现的生成静态页用到的FileSystemObject对象!在.Net中涉及此类操作的是System。IO以下是程序代码注:此代码非原创!参考别人代码//生成HTML页publicstaticboolWriteFile(stringstrText,stringstrContent,stringstrAuthor){stringpath=HttpContext.Current。Server.MapPath("/news/”);Encodingcode=Encoding。GetEncoding("gb2312”);//读取模板文件stringtemp=HttpContext。Current.Server。MapPath("/news/text.html");StreamReadersr=null;StreamWritersw=null;stringstr="";try{sr=newStreamReader(temp,code);str=sr.ReadToEnd();//读取文件}catch(Exceptionexp){
HttpContext.Current.Response.Write(exp.Message);HttpContext。Current。Response.End();sr.Close();}stringhtmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+"。html”;//替换内容//这时,模板文件已经读入到名称为str的变量中了str=str。Replace(”ShowArticle",strText);//模板页中的ShowArticlestr=str。Replace("biaoti”,strText);str=str。Replace("content”,strContent);str=str.Replace(”author",strAuthor);//写文件try{sw=newStreamWriter(path+htmlfilename,false,code);sw。Write(str);sw.Flush();}catch(Exceptionex){HttpContext.Current.Response。Write(ex.Message);HttpContext.Current。Response.End();}finally{sw.Close();}returntrue;此函数放在Conn。CS基类中了在添加新闻的代码中引用注:工程名为Hoverif(Hover.Conn.WriteFilethis.Title.Text。ToString),this.Content。Text。ToString),this.Author.Text.ToString))){ﻬResponse.Write("添加成功”);}else{Response.Write("生成HTML出错!");}模板页Text.html代码<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4。0Transitional//EN"><HTML〉<HEAD><title>ShowArticle〈/title>〈body〉biaoti<br>content<br>author</body〉〈/HTML>biaoti〈br>content〈br>author〈/body></HTML>非摸板生成静态页目前已经有很多生成html的新闻系统,但是都是用的模板,本函数实现把asp页面产生的html代码保存成为一个html文件,这样就没有必要改动原来的页面就可以轻松完成一个生成html的新闻系统了。^_^由于代码比较短,这里就不进行注释了〈%ﻬ'当目标页面的包含文件即#include的页面里边存在response.End()的时候本程序有问题'注意:本文件肯定要放在filename指向的文件的同一名目下dimhughchiu_rtcodeFunctionget_exe_code(filename)dimexecodedimtmp_strDimre,re1,content,fso,f,aspStart,aspEnddimms,mexecode=""setfso=CreateObject(”Scripting.FileSystemObject”)setf=fso。OpenTextFile(server.mappath(filename))c.ReadAllf.closesetf=nothingsetfso=nothingsetre=newregexpre。ignorecase=truere.global=truere。pattern=”\〈\%\@[^\%]+\%\〉"content=re.replace(content,"")re.global=falsere.pattern=”\<\!\-\-\s*\#include\s*file\s*=\s*\""([^\”"]+)\""\s*\-\-\>"dosetms=re.execute(content)ifms.count<〉0thensetm=ms(0)tmp_str=get_exe_code(m.submatches(0))content=re.replace(content,tmp_str)elseexitdoendifloopsetm=nothingsetms=nothingﻬre.pattern="^\s*="aspEnd=1aspStart=inStr(aspEnd,content,”<%")+2setre1=newRegExpre1.ignorecase=truere1。global=falsere1.pattern="response\。Write(。+)"dowhileaspStart>aspEnd+1execode=execode&;vbcrlf&amp;"hughchiu_rtcode=hughchiu_rtcode&amp;"""&amp;replace(replace(Mid(content,aspEnd,aspStart-aspEnd-2),””"”,””"””"),vbcrlf,"""&amp;vbcrlf&amp;""")&amp;”"””&amp;vbcrlfaspEnd=inStr(aspStart,content,"%\>”)+2tmp_str=Mid(content,aspStart,aspEnd-aspStart-2)dosetms=re1。execute(tmp_str)ifms.count〈〉0thensetm=ms(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年陕西机电职业技术学院单招职业适应性测试题库含答案详解(培优)
- 2026年青海省果洛藏族自治州单招职业适应性测试题库附参考答案详解(夺分金卷)
- 2026年防城港职业技术学院单招综合素质考试题库附答案详解(培优)
- 2026年闽江师范高等专科学校单招综合素质考试题库含答案详解
- 2026年黄山职业技术学院单招职业适应性考试题库附答案详解(满分必刷)
- 2026年青岛黄海学院单招职业倾向性考试题库及答案详解(名师系列)
- 2026年长治职业技术学院单招职业技能测试题库含答案详解(模拟题)
- 2026年集美大学诚毅学院单招职业适应性测试题库带答案详解(新)
- 2026年青岛酒店管理职业技术学院单招职业适应性考试题库及1套参考答案详解
- 2026年青岛远洋船员职业学院单招职业适应性考试题库及答案详解(夺冠系列)
- 广西-黄邵华-向量的数量积
- 1.2 国内外网络空间安全发展战略
- 2023年湖南省长沙县初中学生学科核心素养竞赛物理试题(含答案)
- 东北大学最优化方法全部课件
- 人教新课标六年级数学下册全册大单元教学设计(表格式)
- EBSD入门简介姚宗勇课件
- 高考数学真题全刷-决胜800题
- RB/T 219-2017检验检测机构资质认定能力评价司法鉴定机构要求
- GB/T 2007.7-1987散装矿产品取样、制样通则粒度测定方法手工筛分法
- 2023年黑龙江农业职业技术学院单招综合素质考试笔试题库及答案解析
- 充分高效利用时间主题班会课件
评论
0/150
提交评论