学习、分享、快乐
当前位置 >> 68楼学习网学习教育电脑学习编程入门PHP教程php生成静态页——实例版

php生成静态页——实例版

[08-23]   来源:http://www.68lou.com  PHP教程   阅读:148

php生成静态页——实例版,本站还有更多关于PHP教程,PHP技巧,php培训,php学习,php安装的文章。
正文:

偶也来说说吧.
生成静态页的主要目的是什么? 提高效率.
在这里我以村子为例来说明我的构架, 请注意, 这个构架没有完全在村子使用.

-----------------------用户读帖子,存在静态页--------------A--------------
用户 :访问 http://www.phpx.com/happy/static/top92092.html
apache: 文件存在. 输出文件
用户 :得到页面


-----------------------用户读帖子,静态页未生成或已删除----B--------------
用户 : 访问 http://www.phpx.com/happy/static/top92092.html
apache: 文件不存在. 重定向到404处理程序 (httpd.conf加 ErrorDocument 404 /errprocess.php 指令)
errprocess.php: 得到用户请求的页面及各种变量. 是否需要进行生成静态的页面?
首字母为: top ,是需要生成的页面,调用showthread.php (需改进结构将页面输出到变量$pagecontent)
得到页面的内容$pagecontent, 将$pagecontent存成静态文件 top92092.html, 
最后可以:
a) header("location:http://www.phpx.com/happy/static/top92092.html")
b) header("HTTP/1.1 200 OK"); 以后 直接输出$pagecontent, 要注意img src等相对链接的位置了!!!
用户 : 得到页面 或者重定向到 A 操作.


-----------------------用户回帖子--------------------------C-------------
用户 : 回复帖子 top92092.html
newreply.php: 删除静态文件 top92092.html (如果用户信息也是生成静态js, 还要同时删除 用户id.js )
数据入库等常规操作. 
最后可以:
a) header("location:http://www.phpx.com/happy/static/top92092id.html")
b) 或者改进 newreply.php 在入库后, 调用 showthread.php 得到页面的内容$pagecontent, 
将$pagecontent存成静态文件 top92092.html, 输出$pagecontent;不过为了方法统一,
建议使用b)重定向只使用一个静态生成点.
用户 :用户得到页面 或 到B操作 


-----------------------用户发表新帖------------------------D------------
用户 : 发表新帖子
newthread.php: (如果用户信息也是生成静态js, 还要同时删除 用户id.js ) 数据入库等常规操作. 
最后可以:
a) header("location:http://www.phpx.com/happy/static/top新帖id.html")
b) 或者改进 newthread.php 在入库后, 调用 showthread.php 得到页面的内容$pagecontent, 
将$pagecontent存成静态文件 top92092.html, 输出$pagecontent;不过为了方法统一,
建议使用b)重定向只使用一个静态生成点.
用户 :用户得到页面 或 到B操作 

-----------------------村子更换html风格---------------------E---------
管理员: 删除 static 目录下的全部文件
用户访问页面, 页面不存在, 执行 B 操作


(
关键点: 
1 不可以直接http://www.phpx.com/happy/top92092.html 这样其他设计的时候有问题

2 要注意文件位置, 比如 happy/http:///remote_pic/naps_1306161727_1.gif 用户访问 happy/showthread.php时 
代码写成 <img /remote_pic/naps_1306161727_1.gif > 看到是对的. 而生成静态页后. 页面位置变成了
happy/static/top92092.html 这时图片的位置就不对了. 变成了 ../http:///remote_pic/naps_1306161727_1.gif
所以showthread.php 写成 <image="/happy/http:///remote_pic/naps_1306161727_1.gif"> 就不会有错了.
这当然会带来一些问题比如以后访问位置改成 www.phpx.com/bbs/ 那showthread.php代码
就需要修改了. 类似的还有很多, 比如javascript一类的. 

3 帖子需要统计点击率, 怎么实现? 在生成文件时加代码 <img src=/happy/clicked.php?id=92092 width=1 height=1> ,由clicked.php 去更新点击数

4 用户信息, 如用户发贴数怎样保持最新? 用javascript 
a) 将用户信息部分改成 <script src=/happy/uinfo.php?uid=用户的id></script> 这样无论用户发贴数变化或者更新头像都是没有问题的
b)用户信息也用其类似办法生成静态 <script src=/happy/static/用户的id.js></script>

5)一个目录下的文件过多就会有问题了.如果帖子量很大 ,全部指向 /happy/static/top帖子id.html
不再是一个好的设计. 可以做变通处理 比如 /happy/static/版面id/top帖子id.html 将每个版面的
帖子放置一个目录等. 类似的算法还很多.

6) 这种设计会提高效率么? 
我们来算算就知道了
不采用以上结构. 一个帖子帖子有10个回复 和 100次浏览(简单计算, 不考虑帖子锁定, 用户权限等等)

每次浏览 需选出帖子内容,选出每个帖子的用户信息(使用join操作) 更新点击数. 100*3 =300次 数据库查询
每次回复 帖子入库 更新原帖回复数, 更新用户发贴数. 10*2 =20次 数据库查询

也就是这个例子需要做 320次数据库查询. 而且其中在浏览时要将用户表 和 帖子表做join
这两个表通常会比较大.(如果不做join, 至少每次浏览加一次数据库查询. 因为帖子已经选出, 可以遍历获得全部发贴
人的id, 再select ** where uid in (全部发帖人id) 获得这些人的信息 ) 

采用静态结构的情况:
a) 用户信息动态 
浏览: 有10个回复, 则被删除十次.
生成10次静态文件, 需做需选出帖子内容,选出每个帖子的用户信息(使用join操作)操作: 10*2=20次
100次浏览: clicked.php更新帖子点击数 100*1 =100 次 uinfo.php 获得信息 100*1 =100 次 
每次回复 帖子入库 更新原帖回复数, 更新用户发贴数. 10*2 =20次 数据库查询
总共需要240次数据库查询

b) 用户信息也静态
浏览: 有10个回复, 则被删除十次.
生成10次静态文件, 需做需选出帖子内容,选出每个帖子的用户信息(使用join操作)操作: 10*2=20次
100次浏览: clicked.php更新帖子点击数 100*1 =100 次
每次回复 帖子入库 更新原帖回复数, 更新用户发贴数. 10*2 =20次 数据库查询
生成新的userid.js 10*1 =10次 数据库查询
总共需要150次数据库查询

对比, 前者需要320次查询, 其中100次为两个大表join . 
a) 需要240次数据库查询,10次大表join 
b) 需要150次数据库查询,10次大表join

这里面还没有考虑调用 静态页 和 调用php的内存及cpu开销. 仅数据库一项差距就比较大了.




如果觉得php生成静态页——实例版不错,可以推荐给好友哦。
Tag:PHP教程PHP技巧,php培训,php学习,php安装电脑学习 - 编程入门 - PHP教程