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;