RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:24小时服务
你可能遇到了下面的问题
关闭右侧工具栏
厦门网优分析PHP批量生成静态HTML的简单原理和方法

网站生成静态页面,有很多好处,本文为大家讲解PHP如何批量生成HTML静态页面。网优,厦门营销网站建设专来服务商!大部分网站的新闻资讯或商品信息都是静态页面。这样做的好处主要是为了:1、加快访问速度,避免过多的操作数据库;2、SEO优化,便于搜索引擎收录。

        本示例围绕 CMS 系统的静态页面方案出发,展示批量生成静态 html 功能。

        注:本文程序只能在 Windows 的 DOS 或 Linux 下执行 PHP 命令来运行。

        本示例主要有4个文件:config.inc.php(配置文件)、Db.class.php(数据库 PDO 类)、Model.class.php(PDO数据库操作类)、index.php(执行文件)

        config.inc.php

[php] view plain copy
1.<?php 
2.header('Content-Type:text/html;Charset=utf-8'); 
3.date_default_timezone_set('PRC'); 
4.define('ROOT_PATH', dirname(__FILE__)); // 根目录 
5.define('DB_DSN', 'mysql:host=localhost;dbname=article'); // MySQL 的 PDO dsn 
6.define('DB_USER', 'root'); // 数据库用户名 
7.define('DB_PWD', '1715544'); // 数据库密码(请您根据实际情况自行设定) 
8.function __autoload($className) { 
9.    require_once ROOT_PATH . '/includes/'. ucfirst($className) .'.class.php'; 
10.} 
11.?> 


         Db.class.php

 


[php] view plain copy
1.<?php 
2.// 连接数据库 
3.class Db { 
4.    static public function getDB() { 
5.        try { 
6.            $pdo = new PDO(DB_DSN, DB_USER, DB_PWD); 
7.            $pdo->setAttribute(PDO::ATTR_PERSISTENT, true);  // 设置数据库连接为持久连接 
8.            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 设置抛出错误 
9.            $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 设置当字符串为空转换为 SQL 的 NULL 
10.            $pdo->query('SET NAMES utf8');  // 设置数据库编码 
11.        } catch (PDOException $e) { 
12.            exit('数据库连接错误,错误信息:'. $e->getMessage()); 
13.        } 
14.        return $pdo; 
15.    } 
16.} 
17.?> 


         Model.class.php

 


[php] view plain copy
1.<?php 
2.// 操作 SQL 
3.class Model { 
4.    /**
5.     * SQL 增删改操作,返回受影响的行数
6.     * @param string $sql
7.     * @return int
8.     */ 
9.    public function aud($sql) { 
10.        try { 
11.            $pdo = Db::getDB(); 
12.            $row = $pdo->exec($sql); 
13.        } catch (PDOException $e) { 
14.            exit($e->getMessage()); 
15.        } 
16.        return $row; 
17.    } 
18.     
19.    /**
20.     * 返回全部数据,返回 PDOStatement 对象
21.     * @param string $sql
22.     * @return PDOStatement
23.     */ 
24.    public function getAll($sql) { 
25.        try { 
26.            $pdo = Db::getDB(); 
27.            $result = $pdo->query($sql); 
28.            return $result; 
29.        } catch (PDOException $e) { 
30.            exit($e->getMessage()); 
31.        } 
32.    } 
33.} 
34.?> 


         index.php

 


[php] view plain copy
1.<?php  
2.require_once './config.inc.php'; 
3.$m = new Model(); 
4.$ids = $m->getAll("SELECT id FROM article ORDER BY id ASC"); 
5.foreach ($ids as $rowIdArr) { 
6.    $idStr .= $rowIdArr['id'].','; 
7.} 
8.$idStr = rtrim($idStr, ','); // 所有文章的 ID 号集合 
9.$idArr = explode(',', $idStr); // 分割成数组 
10.// 下面的程序循环生成静态页面 
11.foreach ($idArr as $articleId) { 
12.    $re = $m->getAll("SELECT id,title,date,author,source,content FROM article WHERE id =". $articleId); // $re 为每篇文章的内容,注意:其类型为:PDOStatement 
13.    $article = array(); // $article 为一个数组,保存每篇文章的title、date、author、content、source 
14.    foreach ($re as $r) { 
15.        $article = array( 
16.                    'title'=>$r['title'], 
17.                    'date'=>$r['date'], 
18.                    'author'=>$r['author'], 
19.                    'source'=>$r['source'], 
20.                    'content'=>$r['content'] 
21.                ); 
22.    } 
23.    $articlePath = ROOT_PATH. '/article'; // $articlePath 为静态页面放置的目录 
24.    if (!is_dir($articlePath)) mkdir($articlePath, 0777); // 检查目录是否存在,不存在则创建 
25.    $fileName = ROOT_PATH . '/article/' . $articleId . '.html'; // $fileName 生成的静态文件名,格式:文章ID.html(主键ID不可能冲突) 
26.    $articleTemPath = ROOT_PATH . '/templates/article.html'; // $articleTemPath 文章模板路径 
27.    $articleContent = file_get_contents($articleTemPath); // 获取模板里面的内容 
28.    // 对模板里面设置的变量进行替换。即比如:把模板里面的 <{title}> 替换成数据库里读取的 title,替换完毕赋值给变量 $articleContent 
29.    $articleContent = getArticle(array_keys($article), $articleContent, $article); 
30.    $resource = fopen($fileName, 'w'); 
31.    file_put_contents($fileName, $articleContent); // 写入 HTML 文件 
32.} 
33. 
34./**
35. * getArticle($arr, $content, $article) 对模板进行替换操作
36. * @param array $arr 替换变量数组
37. * @param string $content 模板内容
38. * @param array $article 每篇文章内容数组,格式:array('title'=>xx, 'date'=>xx, 'author'=>xx, 'source'=>xx, 'content'=>xx);
39. */ 
40.function getArticle($arr, $content, $article) { 
41.    // 循环替换 
42.    foreach ($arr as $item) { 
43.        $content = str_replace('<{'. $item .'}>', $article[$item], $content); 
44.    } 
45.    return $content; 
46.} 
47.?> 
 


上一条:    下一条:小程序 微信和支付宝的一场战争?