PHP教程之PHP关于复杂的页面缓冲手艺
PHP和HTML混合编程应该不成问题,在这期间,你完全可以让PHP给你算算 一加一等于几,然后在浏览器输出,不要觉得幼稚,这的确是跟阿波罗登月一样,你打的是一小段代码,但是对于你的编程之路,可是迈出了一大步啊!兴奋吧?但是不得不再给你泼点冷水,您还是菜鸟一个。页面 其实说它为手艺,或许不克不及说是真实的手艺。这只不外是我自已想出来的页面处置的办法,固然与他人的设法多是分歧的。不外我仍是想给它一个难听的名字。那末我这里所指的页面缓冲是甚么呢?就是指将静态生成的页面保留起来,供下一次的利用。如许下一次会见它能够就不需求静态生成了。就象供应了一个cache 一样。在我的网站上,或许你的网站也是如斯,利用了象模板之类的手艺,如许用户所看到的页面就是静态生成的。然而一个页面临于你是如许,关于他人能够仍是如许,即在一段工夫内是不会变更的,假如将前次生成的了局直接前往给下一次会见的用户不是更好吗?削减了生成工夫,效力要高一些。我想跟着网站的开展,速度与效力成绩仍是要思索的。这里我给出我的完成,但愿对人人有所匡助。只是一个思绪,没有详细的完成。利用前提
是否是一切的网页最好都利用呢?我想不需求,并且也不成能。之所以能缓冲就是由于下一次会见与上一次会见的内容多是完整一样的。所以关于常常变更的页面就不适合了。好比页面上要显示计数信息的就不太适合。还有就是假如你的静态页面输入时,没有先输入到变量中,而是直接前往给用户,如利用echo,print ,readfile之类的输入,我团体以为如今还作不到。由于没法将输入了局失掉,保留到文件中去(归正我是想了半天没有想出有甚么可以将直将输入的器材截上去,重定向到文件中去)。那末对照适的静态页面的处置就是:输入了局应当可以放到一个字符串当中。所以利用前提就是:
页面根基不会变更
静态页面的处置了局可以寄存到字符串中
如许利用模板类来处置静态页面就很好了。经由过程在模板中设置可交换的变量,然后依据实践的值交换响应的模板中的变量,同时可以将了局放到字符串中停止输入,这类模板类的处置十分合适保留处置后的页面。固然不利用模板类,也能够经由过程字符串的处置来生成输入了局也是可行的。至于怎样做就不会商了。
完成
如前所述,不是一个真实的完成,而是一个完成的思绪。
处置流程:
依据会见的请求,生成缓冲文件名
检查文件名是不是存在,假如文件不存在,则生成静态页面,将页面保留,同时输入了局,停止;假如存在,则履行第3步
统计文件的修正工夫,及与静态页面熟成有关的文件的修正工夫
对照缓冲文件的修正工夫与其它页面的修正工夫,假如其它页面修正工夫大于缓冲文件修正工夫,以为静态了局能够会产生变更,则从头生成静态页面了局,保留到文件中,且输入了局,停止;不然履行第5步
申明缓冲文件最新,则直接输入缓冲文件
这就是我的处置。至于缓冲文件若何保留,可以建一个一时目次也能够利用数据库处置。假如利用了数据库则判别文件是不是最新的体例也应作变更,好比在数据库中增添生成工夫字段,对照这个工夫字段与其它文件的修正工夫便可。办法人人自已想。
我的详细完成的例子
为了匡助人人有个理性熟悉,这里我给出在我的主页上完成的基于文件处置的办法。只要次要的处置代码,不完全。
<?
1 $tmpfile="../tmp/".basename($REQUEST_URI);
2 $tmpfile=str_replace("?", "_", $tmpfile);
3 $tmpfile=str_replace("&", "_", $tmpfile);
4 if(file_exists($tmpfile))
5 {
6 $cflag=false;
7 $dtmp=filemtime($tmpfile);
8 $itmp=filemtime($incfile);
9 $cflag=$cflag | ($dtmp < $itmp);
10 $ctmp=filemtime(basename($PHP_SELF));
11 $cflag=$cflag | ($dtmp < $ctmp);
12 $ttmp=filemtime("template/content.ihtml");
13 $cflag=$cflag | ($dtmp < $ttmp);
14 }
15 else
16 $cflag=true;
17
18 if(!$cflag) //利用存在的文件
19 {
20 readfile($tmpfile);
21 exit;
22 }
23
24 //创立新的文件
25 include "template.class.php3";
26
27 $fp=fopen($incfile, "r");
28 $content=fread($fp, filesize($incfile));
29 fclose($fp);
30
31 //上面停止模版处置
32 $t = new Template("template", "keep");
33
34 $t->set_file("contentfile","content.ihtml");
35
36 $t->set_var(
37 array(
38 "content"=>$content
39 ));
40
41 $t->parse("outputcontent","contentfile");
42
43 $fp=fopen($tmpfile, "w");
44 if($fp)
45 {
46 flock($fp, 3);
47 fwrite($fp, $t->get_var("outputcontent"));
48 flock($fp, 1);
49 fclose($fp);
50 }
51 $t->p("outputcontent");
?>
先向人人引见一下我的目次布局:
/---bin/ 履行法式目次
| |--content.php3 用于处置文件显示的法式
| |--template/ 用于寄存模板文件的目次
| |---content.ihtml 模板文件
|-docs/ 数据文件
|-tmp/ 寄存缓冲文件
ontent.php3文件用来处置静态页面。用户可以经由过程content.php3?page=id号来读出一个数据文件。详细办法我就不说了,人人只需晓得每一个数据文件都有一个分歧的id号,如许content.php3?page=id号的体例就能够独一标识一个数据文件。
第1-3行,生成一时文件名。将'?','&'等字符交换成'_'。
第4行,判别一时文件名是不是存在,假如有则履行第18-22行,并停止。
第6-13行,判别与生成静态页面有关的文件修正工夫与一时文件哪一个更新,设置从头生成标记。在这里利用函数filemtime()来失掉最初修正工夫。
第24-41行,使用模板类生成静态了局,放在变量中。关于模板的处置可以参考《模板,PHPLIB处置体例》一文。
第43-50行,生成一时文件。此处对文件停止了加锁处置,以象写抵触。
第51行,输入了局。
这就是我的处置,人人可以自行修正。
缓冲是一项成心义的手艺,可以进步会见速度,削减体系损耗。不外办法能够有多种多样,人人可以自在发扬。在学习HTML中我想边学边做是最有效的方式,当然这一方式对于学习PHP同样是最有效的。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能: 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
页:
[1]