PHP实现页面静态化页面

ob_start     打开输出控制缓冲(要求php开启缓存,在php配置文件php.ini文件中可以设置 output_buffering = on)

ob_get_contents     返回输出缓冲区内容

ob_clean     清空(擦掉)输出缓冲区

ob_get_clean     得到当前缓冲区的内容并删除当前输出缓冲区

php生成文件的函数 file_put_contents('文件路径','文件内容')。(当然php中还有其他写文件的方法,如fwrite)

 

看demo
db.php  链接数据库类(自己链接数据库)

<?php 
	/**
	 * 数据库连接封装
	 */
	class Db {
		//存储类的实例的静态成员变量
		private static $_instance;
		//数据库链接静态变量
		private static $_connectSource;
		//连接数据库配置
		private $_dbConfig = array(
				'host' => '127.0.0.1',
				'user' => 'root',
				'password' => 'root',
				'database' => 'test'
			);
 
		private function __construct() {
 
		}
 
		/**
		 * 实例化
		 */
		public static function getInstance() {
			//判断是否被实例化
			if(!(self::$_instance instanceof self)) {
				self::$_instance = new self();
			}
			return self::$_instance;
		}
 
		/**
		 * 数据库连接
		 */
		public function connect() {
			if(!self::$_connectSource) {
				//数据库连接
				// @ 符号可以取消警告提示
				self::$_connectSource = @mysql_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);
 
				if(!self::$_connectSource) {
					//抛出异常处理
					throw new Exception('mysql connect error ');
				}
				//选择一款数据库
				mysql_select_db($this->_dbConfig['database'], self::$_connectSource);
				//设置字符编码
				mysql_query("set names UTF8", self::$_connectSource);
			}
 
			//返回资源链接
			return self::$_connectSource;
		}
	}
?>
<?php 
	//1、连接数据库,然后从数据库里面获取数据
	//2、把获取到的数据填充到模板文件里面
	//3、需要把动态的页面转化为静态页面,生成纯静态化文件

	if(is_file('index.html') && (time() - filemtime('index.html')) < 10) { //设置缓存失效时间
		require_once('index.html');
	} else {
		require_once('db.php');
 
		$connect = Db::getInstance()->connect();

		$sql = "SELECT * FROM news WHERE `category_id` ORDER BY id DESC LIMIT 5";
		$result = mysql_query($sql, $connect);
		$news = array();
		while($row = mysql_fetch_array($result)) {
			$news[] = $row;
		}
		// echo '<pre>';
		// print_r($news);
		// die;
		ob_start(); //开启缓存区
 
		//引入模板文件
		require_once('./2.php'); //动态文件    singwa.php界面同样进过缓冲区
		// echo ob_get_contents();
		// die;
		file_put_contents('index.html', ob_get_contents());
		/*if(file_put_contents('index.shtml', ob_get_clean())) {
			echo 'success';
		} else {
			echo 'error';
		}*/
	}
	
?>

2.php

	<title>新闻中心</title>

数据库文件

/*
 Navicat Premium Data Transfer

 Source Server         : bendi
 Source Server Type    : MySQL
 Source Server Version : 50553
 Source Host           : localhost:3306
 Source Schema         : test

 Target Server Type    : MySQL
 Target Server Version : 50553
 File Encoding         : 65001

 Date: 22/10/2018 11:10:34
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for news
-- ----------------------------
DROP TABLE IF EXISTS `news`;
CREATE TABLE `news`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `category_id` int(4) NOT NULL,
  `type` int(4) NOT NULL,
  `s_title` char(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `title` char(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `image` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `description` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `create_time` int(11) NOT NULL,
  `update_time` int(11) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of news
-- ----------------------------
INSERT INTO `news` VALUES (1, 1, 1, 'SD1111111发', '刚改过', '', '而过摄入高', 1540173889, 1540173889);
INSERT INTO `news` VALUES (2, 1, 1, '地方撒', '打发又该', '', '阿达尔', 1540173889, 1540173889);
INSERT INTO `news` VALUES (3, 1, 1, '打算干啥', '收费收111111', '', '是否公司认购', 1540173889, 1540173889);
INSERT INTO `news` VALUES (4, 1, 1, '大师傅', '阿萨德', '', '打发', 1540173889, 1540173889);

SET FOREIGN_KEY_CHECKS = 1;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值