仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 742|回复: 18
打印 上一主题 下一主题

[学习教程] PHP教程之复杂的页面缓冲手艺

[复制链接]
跳转到指定楼层
楼主
发表于 2015-2-4 00:07:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。   作者:limodou

媒介
  其实说它为手艺,或许不克不及说是真实的手艺。这只不外是我自已想出来的页面处置的办法,固然与他人 的设法多是分歧的。不外我仍是想给它一个难听的名字。那末我这里所指的页面缓冲是甚么呢?就是指将静态生成的页面保留起来,供下一次的利用。如许下一次会见它能够就不需求静态生成了。就象供应了一个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/ 寄存缓冲文件

  content.php3文件用来处置静态页面。用户可以经由过程content.php3?page=id号来读出一个数据文件。具
体办法我就不说了,人人只需晓得每一个数据文件都有一个分歧的id号,如许content.php3?page=id号的体例
就能够独一标识一个数据文件。

第1-3行,生成一时文件名。将'?','&'等字符交换成'_'。
第4行,判别一时文件名是不是存在,假如有则履行第18-22行,并停止。
第6-13行,判别与生成静态页面有关的文件修正工夫与一时文件哪一个更新,设置从头生成标记。在这里利用
   filemtime()来失掉最初修正工夫。
第24-41行,使用模板类生成静态了局,放在变量中。关于模板的处置可以参考《模板,PHPLIB处置体例》
   一文。
第43-50行,生成一时文件。此处对文件停止了加锁处置,以象写抵触。
第51行,输入了局。

  这就是我的处置,人人可以自行修正。

  缓冲是一项成心义的手艺,可以进步会见速度,削减体系损耗。不外办法能够有多种多样,人人可以自
由发扬。

到现在,对排版还是不很熟练,经常会排不好。
简单生活 该用户已被删除
沙发
发表于 2015-2-4 09:00:48 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
金色的骷髅 该用户已被删除
板凳
发表于 2015-2-9 01:30:20 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
活着的死人 该用户已被删除
地板
发表于 2015-2-26 17:06:50 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
乐观 该用户已被删除
5#
发表于 2015-3-6 15:12:39 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
因胸联盟 该用户已被删除
6#
发表于 2015-3-12 18:29:02 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
7#
 楼主| 发表于 2015-3-15 20:31:27 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
爱飞 该用户已被删除
8#
发表于 2015-3-17 04:09:01 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
小妖女 该用户已被删除
9#
发表于 2015-3-20 03:57:24 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
若天明 该用户已被删除
10#
发表于 2015-3-24 20:57:09 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
深爱那片海 该用户已被删除
11#
发表于 2015-3-25 11:11:59 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
分手快乐 该用户已被删除
12#
发表于 2015-3-26 14:06:39 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
莫相离 该用户已被删除
13#
发表于 2015-3-27 13:57:26 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
只想知道 该用户已被删除
14#
发表于 2015-4-6 08:14:30 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
变相怪杰 该用户已被删除
15#
发表于 2015-4-6 17:03:23 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
飘灵儿 该用户已被删除
16#
发表于 2015-4-17 03:35:58 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
老尸 该用户已被删除
17#
发表于 2015-4-25 02:27:39 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
若相依 该用户已被删除
18#
发表于 2015-4-26 11:09:24 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
第二个灵魂 该用户已被删除
19#
发表于 2015-5-1 08:10:35 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 19:39

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表