2.5 动态生成静态HTML网页代码
我们知道,PHP读取MYSQL数据库中的数据进行动态显示时,在访问量大的情况下,会有很多性能问题,如果租用别人的虚拟主机,则会因为CPU消耗过多而被限制CPU,导致网页无法访问。我这里给出一个PHP动态生成HTML的方法,可以极大降低服务器CPU负荷,提高用户访问的速度。
本例要点
首先必须明白本节要解决的问题,实际上就是要让初次访问者以外的用户访问的是静态网页,而初次访问者访问时会生成那个静态的网页。本节的解决方式是想让用户始终以静态网页网址的形式访问网页,因此必须有将静态网页URL自动转换为真实URL的过程。通过修改.htaccess文件,可以实现上述的地址转换过程。具体设置如下。
上述设置的意思是例如将在post目录下的html文件,转发到samples/chap2/static目录的staticfile.php文件中,括号部分html文件名将作为staticfile.php文件的查询(Query)信息,会在程序中作为输入数据使用。
不要上述的转换,让用户直接访问动态网页网址也能实现,无非是将静态html文件名通过某种方式传入即可。熟悉SEO(Search Engine Optimization,搜索引擎优化)的朋友应该会了解为什么要用静态网页URL的理由吧,是的,使用静态网页URL在有些搜索引擎(如Google)中会提高网页排名的。
了解了上述问题的解决方法后,那下一步就是如何生成静态网页,这个就要用到2.2节中已经详细介绍过的ob_start函数,理解了2.2节内容的朋友,很容易就能理解此处生成静态网页的处理。
目录结构
代码
启动重写引擎。
打开浏览器缓冲。
取得查询信息,将作为静态html文件名使用。
4至5行取得当前的路径。
合成静态html文件的路径。
文件存在时(第7行),且判断上次生成HTML文件是否超过1小时,若没有才直接输出文件内容。
15行至23行为测试网页内容。
使用ob_get_flush函数刷新缓冲区,返回缓冲区的内容,同时关闭缓冲区。
26行至30行以创建新文件的方式将缓冲里的网页内容写入静态html文件中。
补充
隐藏信息的取得
Request信息中包含了表单数据或查询(Query)数据这些眼睛看得到的数据。实际上除了上述的看得见的数据外,还包含了很多眼睛看不见的信息(头信息)。取得这些信息对程序处理是很有用的。例如如果知道了客户端所使用的语言,你就可以给出与客户端语言相对应的显示,就能实现与浏览器语言相适应的多语言对应了。
PHP中通过$_SERVER这个超级全局变量可以简单地获得这些看不见的信息。刚开始使用PHP编程的程序员容易忽略这些。掌握了这些对程序、页面的控制是很有帮助的。表2-4所示的是$_SERVER变量中所有数据。
表2-4 $_SERVER变量中所有数据