浅谈PHP动态生成静态页面

2007-09-22 17:55:15| 分类: 思绪燃星火——技

题记:想做一件事,就要从0开始,我相信自己会成功的!

面对资金的问题,一些站长被迫只能先开个满足几千流量的小站起家,但是我可不想加入他们,所以研究了一下PHP生成静态页面的技术。

在动态脚本中,PHP的速度是毋庸置疑的,但是我们怎样让PHP发挥更大的效率呢?答案就只有生成静态页面了。但是由于静态页面几乎没有交互,所以如何使静态页面“活起来”就是我们的目的。

经过了一番资料的查找,最后定位在“缓存技术”上。

我们的网站有些信息基本不变的,对于经常变化的信息放在缓存中以加快显示速度。这里所说的缓存,通俗的理解就是一些保存在服务器端的共用信息,我们在保存缓存的时候可以指定下次更新的时间的判断,例如要每5分钟更新一次,可以记录上次更新的时间并和当前时间比较,如果大于 5 分钟则读取数据库,对内容进行更新,否则直接读取缓存数据。当然,缓存需要客户端用户激活的,只需一次。[下面是引用网上整理的信息]

ob_start()函数:打开输出缓冲区.
函数格式 void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。

ob_get_contents :返回内部缓冲区的内容。
函数格式:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE.

ob_get_length:返回内部缓冲区的长度。
函数格式:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE.

ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
函数格式:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除

ob_end_flush:发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
函数格式:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)

ob_implicit_flush:打开或关闭绝对刷新
函数格式:void ob_implicit_flush ([int flag])
说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()

文件写入:
int fwrite ( resource handle, string string [, int length] )
fwrite() 把 string 的内容写入 文件指针 handle 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。
相关参考官方网站: 文件参考

三、解决方案
思路:开启 ob_start缓冲,当已经调出数据的时候获取 ob_get_contents,然后生成静态页,ob_end_clean清除缓冲.ok,就这么来,来看一个例子(php+mysql的结合):
创建数据库:

CREATE TABLE `bihtml` (`id` int(11) NOT NULL auto_increment,`szdtitle` varchar(16) NOT NULL,`szdcontent` text NOT NULL,PRIMARY KEY  (`id`)
) TYPE=MyISAM;
获取当前的ID,并导入模板:ob_start();
$id=_POST['id']
if(!isset($id)&&is_integer($id))
{@$db=new mysqli('localhost','root','admin','bihtml');$result=$db->fetch_one_array("select  * from szd_bi where id='$id'");if(!empty($result)){ $tmp->assign(array("Szdtitle",htmlspecialchars($result['titles']),"Szdcontent",$result['titles'])); }$tpl->display('default_1.tpl');$this_my_f= ob_get_contents(); //此处关键ob_end_clean();$filename = "$id.html";if(tohtmlfile_cjjer($filename,$this_my_f))echo "生成成功 $filename";elseecho "生成识别";}
}
//把生成文件的过程写出函数
function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)
{if (is_file ($file_cjjer_name)){@unlink ($file_cjjer_name);}
$cjjer_handle = fopen ($file_cjjer_name,"w");if (!is_writable ($file_cjjer_name)){return false;}if (!fwrite ($cjjer_handle,$file_cjjer_content)){return false;}
fclose ($cjjer_handle); //关闭指针
return $file_cjjer_name;
}

四、说明事项
1: 一般建议管理员添加数据的时候就生成静态页面,可以考虑记录生成的文件名次和路径.
2: php主要是 ob_starts()和 ob_get_contents,生成静态页面的时候很有用,当然也可以考虑调出数据库直接替换模板里面的变量也是可以的.
3: 主要的模板使用smarty,phplib都是可以的,smarty使用比较简易.

038 浅谈PHP动态生成静态页面相关推荐

  1. 谈用url重写的方法替代生成静态页面的好处

    谈用url重写的方法替代生成静态页面的好处 [color=Red]声明:这个是一篇asp.net的技术文章,为本人原创并首发.[/color] 本来不想写了,因为写了net 下的采集技术文章,没人理, ...

  2. php动态生成页面结构,PHP 动态生成静态HTML页面示例代码

    temp.html {penglig_site_title} test.php header('content-type:text/html; charset=utf-8');//防止生成的页面乱码 ...

  3. 动态网站如何生成静态页面

    本文从一个ASP程序员的角度用大量实例祥细介绍了动态网站如何生成静态页面原理,又从一个采集程序开发者的角度去祥细介绍了网站数据采集的原理及功防策略. 关于网站生成静态页面,为了让本文读者容易理解,文内 ...

  4. Asp.net动态生成html页面

    作者:网际浪子专栏(曾用名littlehb)  http://blog.csdn.net/littlehb/ 适用于:Microsoft ASP.NET 摘要:asp.net动态生成html页面,适用 ...

  5. 利用ASP.NET生成静态页面

    目前生成静态页面的方法大致分为两种,一种是直接访问动态页面地址,将其生成的html代码保存成静态页面.另一种是通过读取页面模板,对其中需要替换的内容进行替换的方式进行生成.其中前一种方法简单,对于生成 ...

  6. PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程

    1.服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器. 2.如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件 ...

  7. 标签页如何用php静态显示,php使用标签替换的方式生成静态页面

    这段代码演示了php如何通过自定义的模板页面和自定义标签生成静态页面.原理非常简单,就是将模板页面中的标签替换成动态数据即可.希望能给你一定的启发. template.html 模板文件 {site_ ...

  8. 动态生成HTML页面

    查看文章     Asp.net动态生成html页面2007-06-17 09:51此功能适用于后台数据库功能不强的web站点,即大部分文本不是存放在数据库的记录中,而是放在html文件或者xml文件 ...

  9. php读取模板生成静态功能,php 生成静态页面的办法与实现代码详细版

    php中主要用到的就是要用到fread()和fwirte().而静态页面生成了之后,就会牵扯到修改的问题.这里可以用到正则匹配的方法来替换模版中改变的部位.不过此种方法太麻烦,值得推荐的方法是直接把原 ...

最新文章

  1. 华为不造车,广汽合作智能驾驶
  2. asp.net提交危险字符处理方法之一
  3. 语义分割--FCN 算法中的一些细节--特征怎么融合
  4. qt designer启动后不显示界面问题的原因与解决办法
  5. python字典值的和计算_第一章Python数据结构和算法(字典的运算)
  6. C++11学习笔记-----获取异步操作执行结果
  7. 如何使用SAP UI5 SDK网站查询指定控件的属性如何使用
  8. 计算机控制系统的闭环复极点,计算机控制 第四章 2.ppt
  9. 【git】gitk 通过图形界面工具来查看版本历史
  10. 本田电动SUV Prologue拟2024年上市销售 初始年销售目标7万辆
  11. CentOS 7使用yum安装MYSQL
  12. 2021年内衣品牌营销传播方案-婧麒+美柚.pdf(附下载链接)
  13. 巩固——React的详细安装教程
  14. Nginx+Tomcat+Session 高性能群集搭建
  15. Rust : wasm尝试 与wasmtime库
  16. java强制删文件夹_java删除文件或文件夹的方法
  17. 【前端面试题】前端布局问题
  18. 光纤通道网络FC vs 以太网光纤通道FCoE
  19. table表格表头添加斜线
  20. quartus dcfifo操作

热门文章

  1. SQL Server 2008 (2008 R2) 清理日志方法
  2. 李笑来python自学_自学是门手艺--李笑来
  3. Alist常用样式代码
  4. ZYNQ开发之PL-PS中断
  5. JavaScript 面向对象(二) —— 案例篇
  6. SVN教程 服务端/客户端
  7. ubuntu配置静态ip的方法
  8. 一些使用DPABI处理fMRI数据的记录
  9. html中点击图标变色,css可变色图标及原理分析
  10. python不支持的函数string_Python字符串string常用方法和函数