如何使用PHP批量生成静态html页面
来源:互联网 发布:手机淘宝如何修改密码 编辑:程序博客网 时间:2024/05/16 19:32
众所周知,大部分网站的新闻资讯或商品信息都是静态页面。这样做的好处主要是为了:1、加快访问速度,避免过多的操作数据库;2、SEO优化,便于搜索引擎收录。
本示例围绕 CMS 系统的静态页面方案出发,展示批量生成静态 html 功能。
注:本文程序只能在 Windows 的 DOS 或 Linux 下执行 PHP 命令来运行。
本示例主要有4个文件:config.inc.php(配置文件)、Db.class.php(数据库 PDO 类)、Model.class.php(PDO数据库操作类)、index.php(执行文件)
Model.class.php
index.php
article.htm
本示例围绕 CMS 系统的静态页面方案出发,展示批量生成静态 html 功能。
注:本文程序只能在 Windows 的 DOS 或 Linux 下执行 PHP 命令来运行。
本示例主要有4个文件:config.inc.php(配置文件)、Db.class.php(数据库 PDO 类)、Model.class.php(PDO数据库操作类)、index.php(执行文件)
config.php
<?php 2header('Content-Type:text/html;Charset=utf-8'); 3date_default_timezone_set('PRC'); 4define('ROOT_PATH', dirname(__FILE__)); // 根目录 5require_once './Model.class.php'; 6?>
Model.class.php
<?php 02// 操作 SQL 03class Model { 04 05 function __construct() {06 try {07 $this->dbh = new PDO('mysql:host=localhost;dbname=cms;','root','root',array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES 'utf8';"));08 $this->dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);09 } catch (PDOException $e) {10 echo $e->getMessage();11 exit;12 }13 }14 15 function __destruct() {16 $this->dbh = NULL;17 unset($this->dbh);18 }19 20 function query($sql,$result=0) {21 try {22 $dbh = $this->dbh;23 $stmt = $dbh->prepare($sql);24 $return = $stmt->execute();25 if ($return) {26 if ($result == 3) {27 $retval = $dbh->lastInsertId();28 }elseif ($result == 2) {29 $retval = $stmt->fetchAll(PDO::FETCH_ASSOC);30 }elseif ($result == 1) {31 $retval = $stmt->fetch(PDO::FETCH_ASSOC);32 }else {33 $retval = true;34 }35 }else {36 $retval = false;37 }38 } catch (PDOException $e) {39 $retval = array('msg'=>$e->getMessage(),'sql'=>$sql);40 $error = "SQL[{$sql}] ERR ".$e->getMessage();41 }42 43 return $retval;44 }45 46 public function update($sql) {47 try {48 49 $dbh = $this->dbh;50 $stmt = $dbh->prepare ( $sql );51 $retval = $stmt->execute ();52 53 } catch ( PDOException $e ) {54 55 $retval = $e->getMessage ();56 $this->errLog(__LINE__,__METHOD__,"ERR:{$retval} {$sql}");57 }58 return $retval;59 }60 61 62 /**63 * 返回全部数据,返回 PDOStatement 对象64 * @param string $sql65 * @return PDOStatement66 */ 67 public function getAll($sql) { 68 try {69 $dbh = $this->dbh;70 $stmt = $dbh->prepare($sql);71 $stmt->execute();72 $retval = $stmt->fetchAll(PDO::FETCH_ASSOC);73 74 } catch (PDOException $e) {75 $retval = $e->getMessage();76 }77 return $retval;78 } 79} 80?>
index.php
<?php 02set_time_limit(0);03require_once './config.php'; 04$m = new Model(); 05$ids = $m->getAll("SELECT id FROM article ORDER BY id ASC "); 06$idStr = '';07foreach ($ids as $rowIdArr) { 08 $idStr .= $rowIdArr['id'].','; 09} 10$idStr = rtrim($idStr, ','); // 所有文章的 ID 号集合 11$idArr = explode(',', $idStr); // www.onesheng.cn分割成数组 12$idArrcount = count($idArr);13$i=1;14// 下面的程序循环生成静态页面 15foreach ($idArr as $articleId) { 16 17if($i%100==0){18sleep(2);19}20 $re = $m->getAll("SELECT a.id,title,inputtime,content FROM article AS a LEFT JOIN article_data AS d ON a.id=d.id WHERE a.id =". $articleId); // $re 为每篇文章的内容,注意:其类型为:PDOStatement 21 $article = array(); // $article 为一个数组,保存每篇文章的title、date、author、content、source 22 foreach ($re as $r) { 23 $article = array( 24 'title'=>$r['title'], 25 'time'=>date('Y-m-d H:i:s',$r['inputtime']), 26 'content'=>$r['content'] 27 ); 28 } 29 $articlePath = ROOT_PATH. '/article'; // $articlePath 为静态页面放置的目录 30 if (!is_dir($articlePath)) mkdir($articlePath, 0777); // 检查目录是否存在,不存在则创建 31 $fileName = ROOT_PATH . '/article/' . $articleId . '.html'; // $fileName 生成的静态文件名,格式:文章ID.html(主键ID不可能冲突) 32 $articleTemPath = ROOT_PATH . '/article.html'; // $articleTemPath 文章模板路径 33 $articleContent = file_get_contents($articleTemPath); // 获取模板里面的内容 34 // 对模板里面设置的变量进行替换。即比如:把模板里面的 <{title}> 替换成数据库里读取的 title,替换完毕赋值给变量 $articleContent 35 $articleContent = getArticle(array_keys($article), $articleContent, $article); 36 $resource = fopen($fileName, 'w'); 37 file_put_contents($fileName, $articleContent); // 写入 HTML 文件 38 39 40file_put_contents('mylog.txt','时间:'.date('Y-m-d H:i:s').'--ID:'.$articleId.'--$i:'.$i."\r\n",FILE_APPEND);41++$i;42}43 44/**45 * getArticle($arr, $content, $article) 对模板进行替换操作46 * @param array $arr 替换变量数组47 * @param string $content 模板内容48 * @param array $article 每篇文章内容数组,格式:array('title'=>xx, 'date'=>xx, 'author'=>xx, 'source'=>xx, 'content'=>xx);49 */ 50function getArticle($arr, $content, $article) { 51 // 循环替换 52 foreach ($arr as $item) { 53 $content = str_replace('<{'. $item .'}>', $article[$item], $content); 54 } 55 return $content; 56} 57?>
article.htm
<html>02<head>03<meta charset="utf-8"/>04<title><{title}></title>05</head>06</body>07<center><h1><{title}></h1></center>08<center><p><{time}></p></center>09<hr/>10<div><{content}></div>11</body>12</html>
0 0
- 如何使用PHP批量生成静态html页面
- PHP 批量生成静态html
- PHP 批量生成静态html
- PHP 批量生成静态html
- php生成静态html页面
- asp批量生成html静态页面方法
- 使用freemarker 批量生成静态html
- PHP生成HTML静态页面实例代码
- php生成html静态页面的思路
- PHP生成HTML静态页面实例代码
- 用php生成静态html页面
- 用php生成静态html页面
- PHP生成静态HTML页面简单方法
- 用php生成静态html页面
- PHP生成html静态页面类
- PHP基础-生成静态html页面原理
- Asp.net如何生成html静态页面
- php页面静态化 获取页面缓存生成HTML页面
- 第十七周上机项目2.2引用做形参
- 分享成为高效程序员的7个重要习惯
- 第十七周项目一体会函数参数传递
- git学习第二课
- 黑马程序员--java自学--第三天:
- 如何使用PHP批量生成静态html页面
- Introduction to return oriented programming (ROP)
- 黑马程序员----java GUI详解
- 第十七周上机项目三胖子伤不起
- 第十七周项目二(1)引用作形参
- Objective-C 下的 AOP 编程
- Java Exception Handling Tutorial with Examples and Best Practices
- 深入Java集合学习系列:HashSet的实现原理
- 9*9