2022年PHP生成静态文件的技巧.docx

上传人:Che****ry 文档编号:12792178 上传时间:2022-04-26 格式:DOCX 页数:13 大小:120.67KB
返回 下载 相关 举报
2022年PHP生成静态文件的技巧.docx_第1页
第1页 / 共13页
2022年PHP生成静态文件的技巧.docx_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《2022年PHP生成静态文件的技巧.docx》由会员分享,可在线阅读,更多相关《2022年PHP生成静态文件的技巧.docx(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、PHP生成静态文件的方法1, 下面使用模版的一个方法 ./ 简洁的将模板写进一个文件中存为html.html2, 按时间生成 html 文件名.13 / 13$content= 这是一个以日期时间为文件名的静态生成网页的测试文件,文件名格式一般为 年月日时分秒 .html ;$date = dateYmdHis;$fp = fopen dateYmdHis . .html,w;/ 本函数可用来打开本地或者远端的文件 w 开文件方式为写入,文件指针指到开头处,并将原文件的长度设为0;如文件不存在 , 就建立新文件;if fwrite $fp,$content/ 格式是.int fwriteint

2、 fp文件名 , string string 内容, int length 长度 ;本函数将字符串 string 写入文件资料流的指针fp 上;/ 如有指定长度 length,就会写入指定长度字符串,或是写到字符串终止;fclose $fp;/ 函数用来关闭已经打开的文件的指针fp ;胜利返回 true ,失败就返回 false ;die 写入模板胜利 ; else fclose $fp;die 写入模板失败 . ;echo $content;.3, 下面为转换文件名的一个方法这样就可以把 93e.php 转化为静态的 HTML文件了;要留意的是待转换的文件里不能有 ob_end_clean

3、;和 ob_start ;语句,且目录要有写权限;深化静态生成:谈 PHP生成静态页面一、引 言在速度上 , 静态页面要比动态页面的比方php 快许多 , 这是毫无疑问的 , 但是由于静态页面的敏捷性较差 , 假如不借助数据库或其他的设备储存相关信息的话, 整体的治理上比较繁琐 , 比方修改编辑 . 比方阅读权限限制等 , 但是, 对应一些我们常常频频使用的文件, 比方说 , 开发的新闻发布系统 , 我们不期望许多用户都读取数据库才显示结果, 这样一方面消耗了服务器的资源 , 另一方面占去了浏览者大量珍贵的响应时间, 全部, 有了 静态页面话 的做法 , 当前许多网站都采纳这种技术 , 一般都

4、是由治理后台掌握, 或者生成 html 直接显示 , 或者 xhtml 用 css 掌握显示 , 或者生成 xml 用 xslt显示 , 这些技术都不是难的 , 在 这里我就浅显的说说生成 html 的方法 .二、预备学问模板技术 :笑谈配置 , 使用 Smarty 技术PHP模板引擎 Smarty 深化浅出介绍-2005-12-31PHP-2006-01-04缓存技术 :有些信息比方常常不变的, 但是仍是能变的信息放在缓存中以加快显示速度, 这是很有价值的, 所谓的缓存 , 通俗的懂得就是一些储存在服务器端的共用信息. 它是于服务器同生死的 , 我们在储存缓存的时候可以指定下次更新的时间的判

5、定, 比方要在 5 分钟更新一次 , 可以记录上次更新的时间 , 和当前时间比较 , 假如 大于 5分钟 , 读取数据库 , 更新换成 , 否就直接读取缓存数据 , 当然 , 缓存需要客户端用户激活的, 只需一次 .ob_start函数 : 打开输出缓冲区 .函数格式 voidob_startvoid说明:当缓冲区激活时, 全部来自 PHP程序的非文件头信息均不会发送,而是储存在内部缓冲区;为了输出缓冲区的内容,可以使用ob_end_flush或 flush输出缓冲区的内容;Flush :刷新缓冲区的内容,输出;函数格式: flush说明:这个函数常常使用, 效率很高;ob_get_conte

6、nts:返回内部缓冲区的内容;函数格式: string ob_get_contentsvoid说明:这个函数会返回当前缓冲区中的内容,假如输出缓冲区没有激活 , 就返回 FALSE.ob_get_length :返回内部缓冲区的长度; 函数格式: int ob_get_lengthvoid说明: 这个函数会返回当前缓冲区中的长度; 和 ob_get_contents 一样,假如输出缓冲区没有激活 , 就返回 FALSE.ob_end_clean :删除内部缓冲区的内容,并且关闭内部缓冲区函数格式: void ob_end_cleanvoid说明:这个函数不会输出内部缓冲区的内容而是把它删除ob

7、_end_flush:发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区函数格式: void ob_end_flushvoid说明:这个函数发送输出缓冲区的内容(假如有的话)ob_implicit_flush:打开或关闭确定刷新函数格式: void ob_implicit_flush intflag说明:默认为关闭缓冲区, 打开确定输出后, 每个脚本输出都直接发送到浏览器, 不再需要调用 flush文件写入 :int fwrite resource handle, string string , int length fwrite把 string的内容写入文件指针 handle处; 假如指定了

8、length,当写入了length个字节或者写完了string以后,写入就会停止,视乎先遇到哪种情形;fwrite返回写入的字符数,显现错误时就返回FALSE ;相关参考官方网站 :文件参考三、解决方案思路 : 开启 ob_start缓冲, 当已经调出数据的时候猎取ob_get_contents,然后生成静态页,ob_end_clean清除缓冲 .ok, 就这么来 , 来看一个例子 php+mysql 的结合 :创建数据库 :CREATE TABLE bihtml id int11 NOT NULL auto_increment,szdtitle varchar16 NOT NULL,szdc

9、ontent text NOT NULL,PRIMARY KEY idTYPE=MyISAM;猎取当前的 ID, 并导入模板 :ob_start;$id=_POSTidif.isset$id&is_integer$id$db=new mysqlilocalhost,root,admin,bihtml; $result=$db-fetch_one_arraysel ect* from szd_bi whereid=$id; if.empty$result$tmp-assignarraySzdtitle,htmlspecialchars$resulttitles,Szdcontent,$resul

10、ttitles; $tpl-display default_1.tpl; $this_my_f= ob_get_contents; / 此处关键 ob_end_clean; $filename =$id.html; iftohtmlfile_cjjer$filename,$this_my_fecho 生成胜利$filename; elseecho 生成识别 ; / 把生成文件的过程写出函数function tohtmlfile_cjjer$file_cjjer_name,$file_cjjer_content if is_file $file_cjjer_nameunlink $file_cj

11、jer_name; $cjjer_handle = fopen $file_cjjer_name,w; if .is_writable $file_cjjer_namereturn false; if .fwrite $cjjer_handle,$file_cjjer_contentreturn false; fclose $cjjer_handle; /关闭指针return $file_cjjer_name;四、说明事项1:一般建议治理员添加数据的时候就生成静态页面, 可以考虑记录生成的文件名次和路径.2:php 主要是ob_starts和 ob_get_contents,生成静态页面的时候

12、很有用, 当然也可以考虑调出数据库直接替换模板里面的变量也是可以的.3:主要的模板使用 smarty,phplib都是可以的 ,smarty使用比较简易 .模板引擎 Smarty 深化浅出介绍 PHP用 PHP实现 MVC开发模式的规律层和表示层有多种模板引擎可供挑选,但是官方引擎SMARTY 产生后, 挑选就有了变化; 它的理念和实现都是相当前卫 的;本文主要争论SMARTY之于 其他模板引擎的不同特点,简要介绍了该引擎的安装及使用,并用一个小的测试案例对比了SMARTY和 PHPLIB template的速度和易用性;一、 MVC需要模板MVC最早是在 SmallTalk语言的开发过程中总

13、结出的一种设计模式,MVC分别代表了 模型 、 视图 和 掌握 ,目的就是让不同的开发角色在大中型工程中各司其职;在网络应用程序的开发中,可以用下图来表示各概念之间的关系;该图展现了一个简洁的WEB应用程序,用户在浏览器上看到信息是数据库服务器上的内容,但在这之前经过了应用服务器加工;开发人员负责的就是建立数据结构、处理数据的规律以及表示数据的方法;96 年 CGI 在中国开头流行的时候, 早期的 WEB程序员都是从 HTML开头自学成材的, 在 PERL 中 print一行行的 HTML并不是一件难事, 但 是随着网络的一步步提速,页面大小也从起初 的二、三十 K 暴涨了十倍;写CGI 程序

14、就产生了一个迫切的要求:分开PERL和 HTML源码;于是,社会进步体现在开发小组内部的分工上;由于美工和程序员对相互的工作并不是十分熟识,在进行合作的过程中需要用一种商定的 语言 进行沟通;这种语言并不是我们的母语或者英语,术语叫做 模板 ,规律和表示依靠它联系; 它是结合了 HTML和脚本语言特点的一种表达方式;通 过这种方式, 表示层可以依据用户所期望的格式来显示经过规律层处理过的数据;假如你有Windows 平台下 MFC的开发体会 , 那么肯定会很熟识 Document/Document Template/View的封装,这就是一个很典型的MVC例子;对于Web应用来说,个人认为J2

15、EE中的 EJB/servlets/JSP是最强大 的,当然仍有简洁美丽的Structs;另一个很出名的实现就是COM/DCOM+A,SP这个组合在我国是最多人使用的;通过几种 MVC实现在 WEB应用程序里的对比,可以得到一个关于模板的概念:一组插入了HTML的脚本或者说是插入了脚本HTML,通过这种插入的内容来表示变化的数据;下面给出一个模板文件的例子,这个模板经过处理后在浏览器里显示Hello, world.$greetings$greetings这里暂且省略处理方式,在后面做特地对比争论;二、为什么选 SMARTY.对 PHP来说,有许多模板引擎可供挑选,比如最早的PHPLIB tem

16、plate和后起之秀 Fast template,经过数次升级,已经相当成熟稳固;假如你对目前手中的模板引擎很中意,那么.也请往下看,信任你作为一个自由软件爱好者或者追求效率和文雅的开发者,下面的 SMARTY介绍多少会有点意思;除了个人偏好的影响,我始终倾向于使用官方标准的实现,比如APACHE的 XML引擎 Axis ;好处就是可以获得尽可能好的兼容性 比如早期 MFC对于 Win3x 的兼容性就比其它的应用程序框架好,当然现在各种版本都很完善了 ;SMARTY发布之前我始终使用的是PEAR 中的 Integrated Template eXtension;这个引擎和PHPLIB temp

17、late 、Fast template几乎是兼容的,从模板的语法到对模板的处理同出一辙:都是将模板读入内存然后调用parse函数, 用数据对预置的标记进行替换;下面看看 SMARTY是怎么做的;接到request后,先判定是否第一次恳求该url ,假如是,将该 url所需的模板文件 编 译 成 php 脚本,然后redirect;假如不是,就是说该url 的模板已经被 编译 过了, 检查不需要重编译后可以立刻redirect,重编译条件 可以自己设定为固定时限,默认的是模板文件被修改;怎么样, 看起来是不是有点眼熟?想起来了这不就是JSP 的原理嘛! 的确, 这种 编译 用在 PHP这样的说明

18、性脚本引擎上显得匪夷所思,但是认真想想,JAVA不也是由 JVM说明执行的吗?这就叫 没有做不到,只有想不到 ;既然谈到了 JAVA,就再对 PHP的将来发表一点看法;PHP官方网站上宣布了要在2003 年年底发布 PHP5.0 版;这个版本拥有许多崭新的特性:比如反常处理, 命名空间,更加面对对象等等;可以说越来越向JAVA靠拢, SMARTY也是新特性之一,使得PHP更适用于大中型工程的开发;但是似乎离我起初挑选它的缘由敏捷易用越来越远了;但就一个软件的生存周期来看, PHP正处在成长期,开发者给予它更多的功能,以期能胜任商业应用是利大于弊的;作为 PHP的忠有用户,确定不期望PHP总是被

19、人指责 才能不足 吧?为什么挑选 SMART,Y 仅仅由于它很像 JSP?当然有更为充分的理由;第一, 除了第一次编译的成本比较高之外,只要不修改模板文件,编译好的cache 脚本就随时可用,省去了大量的 parse时间;其次 SMARTY像 PHP一样有丰富的函数库,从统计字数到自动缩进、文字围绕以及正就表达式都可以直接使用;假如觉得不够,比如需要数据结果集分页显示的功能, SMARTY仍有很强的扩展才能,可以通过插件的形式进行扩充;事实胜于雄辩; 我设计了一个测试程序,通过速度和开发难度这两个因素对比了一下SMARTY 和 PHPLIB template,选 PHPLIB template

20、的缘由是在 patrick的文章 在 PHP世界中挑选最合适的模板 中有一个 PHPLIBtemplate对 Fast template的竞赛,结果 PHPLIB template大获全胜,这使得SMARTY有了一个很好的对手;在测试之前,先谈一下在安装过程中需要留意的问题;php 配置, 链接 access 数据库第一下载php-5.1.1-installer.exe才 2M多, 刷的就下来了, okok, 然后运行 , 转到 D盘吧,一路顺风,点击next ;然后建一个目录 php, 新建文件 info.php输入代码:在 iis里数据 http:/localhost/php/info.p

21、hp假如显现一长串的PHP Version 5.1.1等样子的话 , 恭喜 , 配置好了;如图:新建 php/data/db.mdb,建表 szd_t,输入点数据吧,如图:建立文件 default.php;输入:Open$connstr;$rs= new comADODB.RecordSet ;$rs-Openselect* fromszd_t,$conn,1,1; while. $rs-eof $f = $rs-Fields1; echo $f-value;$rs-MoveNext; .浏览 , 仍打印你刚在数据库的记录, 胜利胜利 , 哈哈哈 , 完毕;如图:php 生成静态 html 的

22、方法目前网络上好多网站的新闻发布系统都采纳了动态服务器技术生成静态HTML的做法, 这样做的好处是:一是能减轻其服务器的负担,二是由于生成了HTML静态页面,所以其网站被搜寻引擎搜寻到的机率更大一些;笔者的网站曾经使用PHP这一动态技术来构建新闻发布系统,其原理也就是应用了PHP生成 HTML静态页面的技术,相关平台是Windows XP Sp2+php4.32+mysql ,因此,在这里,想简洁地谈一下这种做法的思路;这篇文章适合于对PHP+MYSQ数L 据库操作, SQL语句以及网页设计有点基础的伴侣,假如您是一个从头开头学的伴侣,那么请先打好基础吧!到这里就不用往下看了;假如您都符合上述

23、条件的话,那么恭喜您,请接着往下看;但是,在详细动手构建之前,您仍要做好以下几点预备工作;一、 具备本地调试 PHP的功能在 WINDOWXSP操作系统下, 笔者建议你可以到网上下载一个 PHP+MYSQL+APHC的HE服务器套装,如华军软件园, 去那里搜寻一下就可以下载到; 下载完后默认安装即可, 这样您就具备了在本地测试 PHP的功能了,省去了许多手动配置的麻烦,怎么样,简洁吧, OK,这仅仅只是第一步;二、 构思新闻发布系统所具备的功能首页的新闻发布往往是通过后台更新的,后台的更新无非是由添加、编辑、 删除数据等基本的功能所实现的; 在这里, 你可以使用网页设计软件来构建你的想要的后台

24、界面,其功能的实现当然是要用到PHP喽;这一步建议您先想好新闻发布系统要有的功能;在这里, 如何用 PHP添加、编辑、删除数据就不再重复,由于重点是如何在这基础上生成静态技术;三、 PHP 生成 HTML的技术原理;哈哈;费话说了那么多,最终到了该讲的地方了;其实,这一原理并不复杂,综合地来讲的话,应当是 PHP中一个替换数据语法的应用;OK,讲一个简洁范例吧, 一步一步地分析! 信任聪慧的你能看得明白的咯,认真看好每一步即可,在这里,只是引导大家如何做而已,详细的可以实践一下!(1)在 MYSQL里新建一数据库, 命名为 database(可自定义) ,新建一表, 命名为 news(由于是新

25、闻发布嘛,取个好记的名字即可,可自定义),然后建立这几个字段名:id 自动递增,这是关键,类型:INTtitle 顾名思义,新闻标题,类型可取TEXT content 新闻内容,类型可取TEXTpath HTML文件路径,类型可取TEXT( 2)建立 conn.php这是连接数据库的PHP文件,你可以把连接数据的语句单独放在这一文件里,以后多个需要连接数据库的文件直接引用这个文件即可;(3) 设计添加新闻的表格add.form简洁的源代码如下 :/提交至 add.php新闻标题 :新闻内容 :/提交至 add.php新闻标题 :新闻内容 :(4) 建立一个 HTML 的模板 , 另存为 mod

26、el.htm, 和 add.php可以在同一目录下;示例源代码 :此新闻的标题 :title此新闻的内容 :content 大括号内的内容即是要被替换的内容,整个静态模板的设计可以依据自己的思路,但 内被替换的内容必需包含在内,如上面的title, content;咔咔 简洁地说,设计好一个很好看的新闻模板后,把要被替换的如title,content等标记放到需要的地方就可以 了撒;(5) 详解 add.php源码/利用上面自动计数的值获得HTML的路径 $path$houzui= ”.html ”;$path=$num.$houzui;/这样形成的路径是自动增长的,如 1.html,2.ht

27、ml,3.html . 添加一条新闻便自动加上 1/以下用 SQL语句添加数据至表news$sql= ”insert into news title,content,path values ” .$title.” , ” .$content.” , ” .$path. ” ”;$query=mysql_query$sql;/ 以下为关键之处,把从表单获得的数据替换模板中的title,content标记$fp=fopen“ model.htm ” , ”r ” /只读打开模板$str=fread$fp,filesize“ mode.htm” ;/ 读取模板中内容$str=str_replace“

28、title”,$title,$str;$str=str_replace“ content” ,$content,$str;/ 替换内容fclose$fp;$handle=fopen$path,” w” ; /写入方式打开新闻路径fwrite$handle,$str; /把刚才替换的内容写进生成的HTML文件fclose$handle;$fp=fopen“ model.htm ”, ” r ” /只读打开模板$str=fread$fp,filesize“ mode.htm” ;/ 读取模板中内容$str=str_replace“title”,$title,$str;$str=str_replac

29、e“ content” ,$content,$str;/ 替换内容fclose$fp;$handle=fopen$path,” w” ; /写入方式打开新闻路径fwrite$handle,$str; /把刚才替换的内容写进生成的HTML文件fclose$handle;Ctrl+A全部挑选然后拷贝 / 收尾工作 :echo“查看刚才添加的新闻”;代码拷贝框echo“查看刚才添加的新闻”;OK,整个生成 HTML的示例源码就到这里,其关键是用了替换的方法;$str=str_replace“ 被替换的内容 ” ,$ 替换的内容 ,$str;因此,总结一下以上的做法:先设计好新闻模板,把需要被替换的内容用 放到模板中相应的位置, 然后设计表单, 再是最终的表单处理程序,把从表单中猎取的变量替换模板 中相应的内容即可, 这样每次都会生成不同的HTML;假如需要修改 HTML的内容也是一样的,获得修改后的表单内容后,先用 update语句更新数据库, 再重新替换一下模板中的内容即可;删除的话,先delete表中要删除的内容,再用unlink$path来删除 HTML的物理文件即可;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁