PHP动态变静态原理

用PHP输出静态页面的方法,就我所知道的,有2种,一种是利用模板技术,另一种是用ob系列函数。两种方法,看起来都差不多,但是实际上,却是不同的。

第一种:利用模板。目前PHP的模板可以说是很多了,有功能强大的smarty,还有简单易用的smarttemplate等。它们每一种模板,都有一个获取输出内容的函数。我们生成静态页面的方法,就是利用了这个函数。用这个方法的优点是,代码比较清晰,可读性好。

这里我用smarty做例子,说明如何生成静态页


代码如下:

<?php 
require('smarty/Smarty.class.php'); 
$t = new Smarty; 
$t->assign("title","Hello World!"); 
$content = $t->fetch("templates/index.htm"); 
//这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了 
$fp = fopen("archives/2005/05/19/0001.html", "w"); 
fwrite($fp, $content); 
fclose($fp); 
?>

第二种方法:利用ob系列的函数。这里用到的函数主要是 ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是打开浏览器缓冲区的意思,打开缓冲后,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区,直到你使用了ob_end_flush().而这里最重要的一个函数,就是ob_get_contents(),这个函数的作用是获取缓冲区的内容,相当于上面的那个fetch(),道理一样的。代码:


代码如下:

<?php 
ob_start(); 
echo "Hello World!"; 
$content = ob_get_contents();//取得php页面输出的全部内容 
$fp = fopen("archives/2005/05/19/0001.html", "w"); 
fwrite($fp, $content); 
fclose($fp); 
?>

(0)

相关推荐

  • PHP动态变静态原理

    用PHP输出静态页面的方法,就我所知道的,有2种,一种是利用模板技术,另一种是用ob系列函数.两种方法,看起来都差不多,但是实际上,却是不同的. 第一种:利用模板.目前PHP的模板可以说是很多了,有功能强大的smarty,还有简单易用的smarttemplate等.它们每一种模板,都有一个获取输出内容的函数.我们生成静态页面的方法,就是利用了这个函数.用这个方法的优点是,代码比较清晰,可读性好. 这里我用smarty做例子,说明如何生成静态页 复制代码 代码如下: <?php  require(

  • Java实现JDK动态代理的原理详解

    目录 概念 案例 静态代理 JDK动态代理模式 原理分析 真相大白 概念 代理:为控制A对象,而创建出新B对象,由B对象代替执行A对象所有操作,称之为代理.一个代理体系建立涉及到3个参与角色:真实对象(A),代理对象(B),客户端. 其中的代理对象(B)起到中介作用,连通真实对象(A)与客户端,如果进一步拓展,代理对象可以实现更加复杂逻辑,比如对真实对象进行访问控制. 案例 需求:员工业务层接口调用save需要admin权限,调用list不需要权限,没权限调用时抛出异常提示. 静态代理 /**

  • PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解

    本文实例讲述了PHP中abstract(抽象).final(最终)和static(静态)原理与用法.分享给大家供大家参考,具体如下: abstract(抽象) PHP 5 支持抽象类和抽象方法.定义为抽象的类不能被实例化.任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的.被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现. 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法:另外,这些方法的访问控制必须和父类中一样(或者更为宽松).例

  • JSP动态网页开发原理详解

    一.什么是JSP?     JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据. 二.JSP原理 2.1.Web服务器是如何调用并执行一个jsp页面的? 浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp

  • Nginx 请求压缩的实现(动态压缩,静态压缩)

    目录 一.介绍 二.请求压缩的流程 三.Gzip压缩 3.1 gzip介绍 3.2 gzip的使用 3.3 gzip的请求 3.4 静态压缩 四.Brotli 4.1 Brotli 概述 4.2 Brotli 的安装 4.3 配置选项 4.4 brotli 测试 一.介绍 请求压缩,是将服务器的结果通过 Nginx 将内容进行压缩后,在发送给客户端,降低网络传输压力,提升传输效率. 常见的两种请求方式是: gzip .brotli(Google),相当于 brotli 的效率会高,后续内容详解.

  • linux生成(加载)动态库静态库和加载示例方法

    动态库的生成: 1./*mysum.c*/ 复制代码 代码如下: #include <stdio.h>#include "src.h" int sum(int a,int b){return (a+b);} 2./*mysum.h*/ 复制代码 代码如下: #ifndef __SRC_H__#define __SRC_H__ int sum(int a,int b); #endif 3./*main.c*/ 复制代码 代码如下: #include <stdio.h&g

  • ASP.NET动态生成静态页面的实例代码

    最近突然想把项目中新闻管理模块做成静态页,在网上找到很多很好的文章,在这里记录一下,现在只是实现静态页面的生成并没有实现分页功能.其主要原理就是读取数据库的数据然后替换掉静态模板页的内容.首先制作一个模板页,暂时命名为template.htm,示例代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-trans

  • C#使用List类实现动态变长数组的方法

    本文实例讲述了C#使用List类实现动态变长数组的方法.分享给大家供大家参考.具体如下: C#中的list可以当做数组使用,而且无需定义长度,完全是动态的 class Person { public string Name { get; set; } public string Address { get; set; } } static void Main(string[] args) { List<Person> people = new List<Person>(); peo

  • Android Fragment(动态,静态)碎片详解及总结

    Android Fragment(动态,静态)碎片详解 一.Fragment的相关概念(一)Fragment的基础知识 Fragment是Android3.0新增的概念,中文意思是碎片,它与Activity十分相似,用来在一个 Activity中描述一些行为或一部分用户界面.使用多个Fragment可以在一个单独的Activity中建 立多个UI面板,也可以在多个Activity中使用Fragment. Fragment拥有自己的生命 周期和接收.处理用户的事件,这样就不必在Activity写一

  • C#实现动态生成静态页面的类详解

    本文实例讲述了C#实现动态生成静态页面的类.分享给大家供大家参考,具体如下: 动态生成静态页面有许多好处,比如生成html网页有利于被搜索引擎收录.同时,由于减少了数据访问,减轻对数据库访问的压力,提高了网页打开速度. 基本思路: 使用一个字符串作为页面模板,再页面中包含用若干标志(用 {标志名} 表示),生成页面时,将标志替换为对应的值. 实现方法: 在初始化TextTemplate实例时读入模板,以标志为分割点将模板分割成几部分,生成页面时只需简单的将模板内容和标志的值连接起来.例如: 假如

随机推荐