search
HomeBackend DevelopmentPHP TutorialPHP中批量生成静态html(命令行下运行PHP)_PHP

众所周知,大部分网站的新闻资讯或商品信息都是静态页面。这样做的好处主要是为了: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

复制代码 代码如下:
header('Content-Type:text/html;Charset=utf-8');
date_default_timezone_set('PRC');
define('ROOT_PATH', dirname(__FILE__)); // 根目录
define('DB_DSN', 'mysql:host=localhost;dbname=article'); // MySQL 的 PDO dsn
define('DB_USER', 'root'); // 数据库用户名
define('DB_PWD', '1715544'); // 数据库密码(请您根据实际情况自行设定)
function __autoload($className) {
 require_once ROOT_PATH . '/includes/'. ucfirst($className) .'.class.php';
}
?>

Db.class.php

复制代码 代码如下:
// 连接数据库
class Db {
 static public function getDB() {
  try {
   $pdo = new PDO(DB_DSN, DB_USER, DB_PWD);
   $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // 设置数据库连接为持久连接
   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 设置抛出错误
   $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 设置当字符串为空转换为 SQL 的 NULL
   $pdo->query('SET NAMES utf8');  // 设置数据库编码
  } catch (PDOException $e) {
   exit('数据库连接错误,错误信息:'. $e->getMessage());
  }
  return $pdo;
 }
}
?>

Model.class.php

复制代码 代码如下:
// 操作 SQL
class Model {
 /**
  * SQL 增删改操作,返回受影响的行数
  * @param string $sql
  * @return int
  */
 public function aud($sql) {
  try {
   $pdo = Db::getDB();
   $row = $pdo->exec($sql);
  } catch (PDOException $e) {
   exit($e->getMessage());
  }
  return $row;
 }

 /**
  * 返回全部数据,返回 PDOStatement 对象
  * @param string $sql
  * @return PDOStatement
  */
 public function getAll($sql) {
  try {
   $pdo = Db::getDB();
   $result = $pdo->query($sql);
   return $result;
  } catch (PDOException $e) {
   exit($e->getMessage());
  }
 }
}
?>

index.php

复制代码 代码如下:
require_once './config.inc.php';
$m = new Model();
$ids = $m->getAll("SELECT id FROM article ORDER BY id ASC");
foreach ($ids as $rowIdArr) {
 $idStr .= $rowIdArr['id'].',';
}
$idStr = rtrim($idStr, ','); // 所有文章的 ID 号集合
$idArr = explode(',', $idStr); // 分割成数组
// 下面的程序循环生成静态页面
foreach ($idArr as $articleId) {
 $re = $m->getAll("SELECT id,title,date,author,source,content FROM article WHERE id =". $articleId); // $re 为每篇文章的内容,注意:其类型为:PDOStatement
 $article = array(); // $article 为一个数组,保存每篇文章的title、date、author、content、source
 foreach ($re as $r) {
  $article = array(
     'title'=>$r['title'],
     'date'=>$r['date'],
     'author'=>$r['author'],
     'source'=>$r['source'],
     'content'=>$r['content']
    );
 }
 $articlePath = ROOT_PATH. '/article'; // $articlePath 为静态页面放置的目录
 if (!is_dir($articlePath)) mkdir($articlePath, 0777); // 检查目录是否存在,不存在则创建
 $fileName = ROOT_PATH . '/article/' . $articleId . '.html'; // $fileName 生成的静态文件名,格式:文章ID.html(主键ID不可能冲突)
 $articleTemPath = ROOT_PATH . '/templates/article.html'; // $articleTemPath 文章模板路径
 $articleContent = file_get_contents($articleTemPath); // 获取模板里面的内容
 // 对模板里面设置的变量进行替换。即比如:把模板里面的 替换成数据库里读取的 title,替换完毕赋值给变量 $articleContent
 $articleContent = getArticle(array_keys($article), $articleContent, $article);
 $resource = fopen($fileName, 'w');
 file_put_contents($fileName, $articleContent); // 写入 HTML 文件
}

/**
 * getArticle($arr, $content, $article) 对模板进行替换操作
 * @param array $arr 替换变量数组
 * @param string $content 模板内容
 * @param array $article 每篇文章内容数组,格式:array('title'=>xx, 'date'=>xx, 'author'=>xx, 'source'=>xx, 'content'=>xx);
 */
function getArticle($arr, $content, $article) {
 // 循环替换
 foreach ($arr as $item) {
  $content = str_replace('', $article[$item], $content);
 }
 return $content;
}
?>

 运行截图(Windows 的 DOS 为例) 
PHP中批量生成静态html(命令行下运行PHP)_PHP       
运行完毕截图: 

PHP中批量生成静态html(命令行下运行PHP)_PHP

运行2分钟左右就可以生成 9000多 html。

来自Lee.的专栏 转载注明出处!!!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
通过命令行在 Mac 上启用低功耗模式通过命令行在 Mac 上启用低功耗模式Apr 14, 2023 pm 12:13 PM

对于不熟悉的人来说,低功耗模式会减少 Mac 的能源使用,可能会延长电池寿命,但会暂时牺牲性能,但它的处理得很好,对于大多数用户来说,他们不会注意到任何特别的退化。如果您是 Mac 笔记本电脑用户,并试图从 MacBook Pro 或 Air 中获得尽可能长的电池寿命,那么这是一种非常有用的模式。从命令行启用 Mac 低功耗模式从终端,在任何 Mac 笔记本电脑上键入以下命令字符串:sudo pmset -a lowpowermode 1按 sudo 的要求按回车键并输入管理员密码进行身份验证。

Linux系统中的常用命令和快捷方式Linux系统中的常用命令和快捷方式Jun 18, 2023 am 08:46 AM

随着Linux操作系统的广泛应用,越来越多的人开始需要学习和了解Linux系统中的基本命令和快捷方式。在本文中,我们将介绍一些常用的Linux命令和快捷方式,帮助初学者了解Linux系统,提高工作效率。常用命令1.1ls命令ls命令是Linux中最常用的命令之一。它主要用于列出当前目录下的文件和子目录。常用的选项有:-l:以长格式显示文件信息,包括文件类型

如何通过Linux命令行工具进行日志聚合和统计?如何通过Linux命令行工具进行日志聚合和统计?Jul 30, 2023 pm 10:07 PM

如何通过Linux命令行工具进行日志聚合和统计?在管理和维护Linux系统时,日志记录是非常重要的一项工作。通过日志可以查看系统运行情况、排查问题以及进行性能分析。而对于大规模的系统,日志的数量往往非常庞大,如何高效地对日志进行聚合和统计,成为了运维人员面临的一个挑战。在Linux系统中,我们可以利用命令行工具来进行日志聚合和统计。下面将介绍几个常用的命令行

如何利用MySQL和C++开发一个基于命令行的图书管理系统如何利用MySQL和C++开发一个基于命令行的图书管理系统Sep 20, 2023 pm 01:48 PM

如何利用MySQL和C++开发一个基于命令行的图书管理系统概要:在本文中,我们将介绍如何使用MySQL和C++开发一个简单的基于命令行的图书管理系统。我们将涵盖从数据库设计到C++代码实现的整个过程,并提供具体的代码示例。介绍:图书管理系统是一个常见的应用程序,用于管理图书馆或个人的图书收藏。通过使用MySQL作为数据库和C++作为编程语言,我们可以方便地实

javac不是内部或外部命令也不是可运行的程序怎么解决javac不是内部或外部命令也不是可运行的程序怎么解决Jun 08, 2023 pm 04:54 PM

javac不是内部或外部命令也不是可运行的程序的解决方法: 1、首先官网下载JDK的最新版本并安装;2、进行系统环境变量配置,在path中添加jdk安装的路径;3、进入电脑命令行界面,输入“java -v”出现版本号即可。

详解如何增加Linux安全组端口(命令行方式)详解如何增加Linux安全组端口(命令行方式)Jan 29, 2023 pm 04:51 PM

本篇文章给大家带来了关于Linux的相关知识,其中主要介绍了以 Centos7.x 为例,怎么使用命令行方式来增加Linux的安全组端口,下面一起来看一下,希望对大家有帮助。

如何使用ThinkPHP6的命令行工具如何使用ThinkPHP6的命令行工具Jun 21, 2023 pm 05:53 PM

如何使用ThinkPHP6的命令行工具ThinkPHP6是一款开源的PHP框架,它具有丰富的功能和易于使用的特性。其中,命令行工具是ThinkPHP6的一个重要功能,在开发过程中可以提高开发效率和便捷性。本文将介绍如何使用ThinkPHP6的命令行工具。安装ThinkPHP6首先,需要安装ThinkPHP6。可以通过composer命令安装:composer

测试MySQL连接的高并发性能应如何在命令行进行?测试MySQL连接的高并发性能应如何在命令行进行?Jun 30, 2023 pm 07:25 PM

如何在命令行中测试MySQL连接的高并发性能?随着互联网应用的不断普及,数据库的高并发性能成为了很多需求的关注点之一。而MySQL作为一个流行的开源数据库,其高并发性能也是被广泛关注的。在测试MySQL连接的高并发性能之前,我们需要先明确一些概念和准备工作:并发连接:指的是同时有多个客户端与数据库建立连接,并且这些连接同时进行数据库操作。连接数限制:MySQ

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version