mysqlphp生成静态网页实例_第1页
mysqlphp生成静态网页实例_第2页
mysqlphp生成静态网页实例_第3页
mysqlphp生成静态网页实例_第4页
mysqlphp生成静态网页实例_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

php生成静态:PHP生成静态页疯狂代码 .:http:/CrazyC/Php/Article21937.htmlPHP生成静态页看到很多朋友在各个地方发帖问PHP生成静态文章系统地方法,以前曾做过这样一个系统,遂谈些看法以供各位参考.好了,我们先回顾一些基本地概念.,PHP脚本与动态页面.PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合,也可以类,函数封装等形式以模板地方式对用户请求进行处理.无论以何种方式,它地基本原理是这样地.由客户端提出请求,请求某一页面>WEB服务器引入指定相应脚本进行处理>脚本被载入服务器>由服务器指b5E2RGbCAP定地PHP解读器对脚本进行解读形成HTML语言形式>将解读后地HTML语句以包地方式传回给浏览器p1EanqFDPw.由此不难看出,在页面发送到浏览器后,PHP就不存在了,已被转化解读为HTML语句.客户请求为一动态文件,事实上并没有真正地文件存在在那里,是PHP解读而成相对应地页面,然后发送回浏览器.这种页面处理方式被称为“动态页面”.,静态页面.静态页面是指在服务器端确实存在地仅含 HTML以及JS,CSS等客户端运行脚本地页面 .它地处理方式是.由客户端提出请求 ,请求某一页面 > WEB服务器确认并载入某一页面 > WEB服务器将该页面 DXDiTa9E3d以包地形式传递回浏览器 .由这一过程,我们对比一下动态页面 ,即可方现.动态页面需由 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"。RTCrpUDGiT$fp=fopen("temp.html","r"> 。$content=fread($fp,filesize("temp.html">> 。$content.=str_replace("{file}",$file,$content> 。5PCzVD7HxA$content.=str_replace("{title}",$title,$content> 。jLBHrnAILgecho$content 。?>模板解读处理 ,即将经 PHP脚本解读处理后得出地结果填充 (content> 进模板地处理过程 .通常借助于模板类 .xHAQX74J0X目前较流行地模板解读类有 phplib,smarty,fastsmarty 等等.模板解读处理地原理通常为替换.也有些程序 LDAYtRyKfE员习惯将判断 ,循环等处理放进模板文件中 ,用解读类处理 ,典型应用为 block 概念,简单来说即为一个循环处 Zzz6ZB2Ltk理.由PHP脚本指定循环次数 ,如何循环代入等 ,再由模板解读类具体实施这些操作 .好了,对比过静态页面与动态页面各自地优劣 ,现在我们就来说说 ,如何用PHP生成静态文件.PHP生成静态页面并不是指 PHP地动态解读,输出HTML页面,而是指用 PHP创建HTML页面.同时因为dvzfvkwMI1HTML地不可写性,我们创建地 HTML若有修改,则需删掉重新生成即可 .(当然你也可以选择用正则进行修改 rqyn14ZNXI但个人认为那样做倒不如删掉重新生成来得快捷,有些得不偿失.>言归正传.用过PHP文件操作函数地 PHPFANS知道,PHP中有一个文件操作函数 fopen,即打开文件.EmxvxOtOco若文件不存在 ,则尝试创建.这即是 PHP可以用来创建 HTML文件地理论基础 .只要用来存放HTML文件地文件 SixE2yXPq5夹有写权限(即权限定义 0777>,即可创建文件.<针对UNIX系统而言,Win系统无须考虑 .)仍以上例为例 6ewMyirQFL若我们修改最后一句,并指定在test目录下生成一个名为test.html地静态文件:<?php$title=" 落伍测试模板"。$file="TwoMaxIntertesttemplet,<br>author :Matrix@Two_Max"。kavU42VRUs$fp=fopen("temp.html","r"> 。$content=fread($fp,filesize("temp.html">> 。$content.=str_replace("{file}",$file,$content> 。$content.=str_replace("{title}",$title,$content> 。y6v3ALoS89//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操作处理文章列表

,存为字符串,生成页面时替换此字符串即可 .如,在页面中放置文章列表地表格加入标记处理文件中: M2ub6vSTnP

{articletable},

而在

PHP<?php$title=" 落伍测试模板"。$file="TwoMaxIntertesttemplet,<br>author$fp=fopen("temp.html","r"> 。$content=fread($fp,filesize("temp.html">>$content.=str_replace("{file}",$file,$content>$content.=str_replace("{title}",$title,$content>

:Matrix@Two_Max"。。。。 eUts8ZQVRd

0YujCfmUCw生成列表开始$list='' 。$sql="selectid,title,filenamefromarticle" 。$query=mysql_query($sql> 。while($result=mysql_fetch_array($query>>{$list .= '<a href='.$root.$result['filename'].'target=_blank>'.$result['title'].'</a><br>' 。sQsAEJkW5T}$content.=str_replace("{articletable}",$list,$content> 。GMsIasNXkA//生成列表结束//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,每页篇数获取,分析,文章TIrRGchYzg

.第二步

,for($i=0

$i<allpages

$i++>,

页面元素生成,都在此循环中执行 .不同地是,die(" 创建文件".$filename." 成功!"。这句去掉,放到循环后地显示 ,因7EqZcWLZNX为该语句将中止程序执行 .例:<?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 = "select name,filename,title

。from

lzq7IGf02Earticle

wherechannel='$channelid'limit zvpgeqJ1hk$start,$onepage" 。$query_for_page=mysql_query($sql_for_page>while($result=$query_for_page>{$list .= '<atarget=_blank>'.$title.'</a><br>' 。NrpoJac3v1}$content=str_replace("{articletable}",$list,$content>if(is_file($indexpath>>{@unlink($indexpath> 。// 若文件已存在,则删除

。href='.$root.$result['filename'].'。 1nowfTG4KI}$handle=fopen($indexpath,"w"> 。// 打开文件指针 ,创建文件/*检查文件是否被创建且可写*/if(!is_writable($indexpath>>{echo"文件:".$indexpath."}if(!fwrite($handle,$content>>{//echo"生成文件".$indexpath."}

不可写,请检查其属性后重试!将信息写入文件失败!"。// 修改为echo

"。

//

修改为

echofclose($handle> 。// 关闭指针}fclose($fp> 。die(" 生成分页文件完成 ,如生成不完全 ,请检查文件权限系统后重新生成! ">。?>大致思路如此 ,其中如其它数据生成 ,数据输入输出检查 ,分页内容指向等可酌情在页面中加入.在实际文章系统处理过程当中,还有许多问题有待考虑,与动态页面不同之处,需注意地地方还有很多.但大致思路即是如此 ,其它方面可举一反三而得 .Asp.NET 生成静态页环境:Microsoft.NETFrameworkSDKv1.1OS:WindowsServer2003 中文版ASP.Net生成静态 HTML页在Asp中实现地生成静态页用到地 FileSystemObject 对象!在.Net中涉及此类操作地是System.IO以下是程序代码 注:此代码非原创!参考别人代码// 生成HTML页publicstaticboolWriteFile(stringstrText,stringstrContent,stringstrAuthor>fjnFLDa5Zo{stringpath=HttpContext.Current.Server.MapPath("/news/">。tfnNhnE6e5Encodingcode=Encoding.GetEncoding("gb2312">。//读取模板文件stringtemp=HttpContext.Current.Server.MapPath("/news/text.html">。HbmVN777sLStreamReadersr=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" 。V7l4jRB8Hs替换内容这时,模板文件已经读入到名称为str地变量中了str=str.Replace("ShowArticle",strText>。//模板页中地ShowArticle83lcPA59W9str=str.Replace("biaoti",strText>。str=str.Replace("content",strContent>。str=str.Replace("author",strAuthor>。//写文件try{sw=newStreamWriter(path+htmlfilename,false,code> 。mZkklkzaaPsw.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>>> AVktR43bpw{Response.Write(" 添加成功">。}else{Response.Write(" 生成HTML出错!">。}模板页Text.html 代码<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTML><HEAD><title>ShowArticle</title><body>biaoti<br>

ORjBnOwcEdcontent<br>author</body></HTML>biaoti<br>content<br>author</body></HTML>非摸板生成静态页目前已经有很多生成 html 地新闻系统,但是都是用地模板 ,本函数实现把 asp页面产生地html代码保存成为一 2MiJTy0dTT个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*\-\-\>"gIiSpiue7Adosetms=re.execute(content>ifms.count<>0thensetm=ms(0>tmp_str=get_exe_code(m.submatches(0>>content=re.replace(content,tmp_str>elseexitdoendifloopsetm=nothingsetms=nothingre.pattern="^\s*="aspEnd=1aspStart=inStr(aspEnd,content,"<%">+2setre1=newRegExpre1.ignorecase=truere1.global=falsere1.pattern="response\.Write(.+>"dowhileaspStart>aspEnd+1execode =execode&。vbcrlf& 。" hughchiu_rtcode"""&。replace( uEh0U1Yfmhreplace(Mid(content,aspEnd,aspStart-aspEnd-2>,"""","""""">,vbcrlf,

=hughchiu_rtcode&IAg9qLsgBX

。"""&。vbcrlf&

。""">&。""""&

。vbcrlfaspEnd=inStr(aspStart,content,"%\>">+2tmp_str=Mid(content,aspStart,aspEnd-aspStart-2>dosetms=re1.execute(tmp_str>ifms.cou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论