首頁 後端開發 php教程 PHP中批量生成静态html(命令行下运行PHP)_PHP

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

Jun 01, 2016 am 11:54 AM
命令列

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1659
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
透過命令列在 Mac 上啟用低功耗模式 透過命令列在 Mac 上啟用低功耗模式 Apr 14, 2023 pm 12:13 PM

對於不熟悉的人來說,低功耗模式會減少Mac 的能源使用,可能會延長電池壽命,但會暫時犧牲性能,但它的處理得很好,對於大多數用戶來說,他們不會注意到任何特別的退化。如果您是 Mac 筆記型電腦用戶,並試圖從 MacBook Pro 或 Air 中獲得盡可能長的電池壽命,那麼這是一個非常有用的模式。從命令列啟用 Mac 低功耗模式從終端,在任何 Mac 筆記型電腦上鍵入以下命令字串:sudo pmset -a lowpowermode 1按 sudo 的要求按回車鍵並輸入管理員密碼進行身份驗證。

學習如何有效使用命令列工具sxstrace.exe 學習如何有效使用命令列工具sxstrace.exe Jan 04, 2024 pm 08:47 PM

很多使用win10系統的小夥伴在玩遊戲或裝系統的時候有遇見過這個問題,應用程式無法啟動,因為應用程式的並行配置不正確。有關詳細信息,請參閱應用程式事件日誌,或使用命令列sxstrace.exe工具。這可能是作業系統沒有對應權限的緣故,具體的教學下面一起來看看吧。使用命令列sxstrace.exe工具的教學1、該問題通常會在安裝程式、遊戲的時候出錯,其提示為:應用程式無法啟動,因為應用程式的並行配置不正確。有關詳細信息,請參閱應用程式事件日誌,或使用命令列sxstrace.exe工具。 2、開始→

透過命令列將Ubuntu 20.04升級到22.04 透過命令列將Ubuntu 20.04升級到22.04 Mar 20, 2024 pm 01:25 PM

本文詳細介紹了將Ubuntu20.04升級到22.04的步驟。對於使用Ubuntu20.04的用戶,錯過了22.04版本帶來的新功能和優勢。為了獲得更好的體驗和安全性,建議及時升級到較新的Ubuntu版本。 Ubuntu22.04的代號為“傑米水母”,讓我們一起來探索如何取得最新的LTS版本吧!如何透過命令列將Ubuntu20.04升級到22.04掌握命令列會為你帶來優勢。雖然透過GUI更新Ubuntu是可能的,但我們的重點將是透過命令列。首先,讓我們使用以下命令檢查目前運行的Ubuntu版本:$

python命令列參數詳解 python命令列參數詳解 Dec 18, 2023 pm 04:13 PM

在Python中,可以透過命令列傳遞參數給腳本。這些參數可以在腳本內部使用,以便根據不同的輸入執行不同的操作。 Python命令列參數的詳解:1、位置參數:在命令列中依照順序傳遞給腳本的參數,它們可以在腳本內部透過位置來存取;2、命令列選項:以-或--開頭的參數,通常用於指定腳本的特定選項或標誌;3、傳遞參數值:透過命令列傳遞參數值。

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

隨著Linux作業系統的廣泛應用,越來越多的人開始需要學習和了解Linux系統中的基本命令和捷徑。在本文中,我們將介紹一些常用的Linux指令和快捷方式,幫助初學者了解Linux系統,提高工作效率。常用指令1.1ls指令ls指令是Linux中最常用的指令之一。它主要用於列出目前目錄下的檔案和子目錄。常用的選項有:-l:以長格式顯示文件訊息,包括文件類型

Django初探:用命令列創建你的首個Django項目 Django初探:用命令列創建你的首個Django項目 Feb 19, 2024 am 09:56 AM

Django專案開啟之旅:從命令列開始,創建你的第一個Django專案Django是一個強大且靈活的網路應用框架,它以Python為基礎,提供了許多開發Web應用所需的工具和功能。本文將帶領你從命令列開始,創建你的第一個Django專案。在開始之前,請確保你已經安裝了Python和Django。步驟一:建立專案目錄首先,開啟命令列窗口,並建立新的目錄

javac不是內部或外部命令也不是可運行的程式怎麼解決 javac不是內部或外部命令也不是可運行的程式怎麼解決 Jun 08, 2023 pm 04:54 PM

javac不是內部或外部命令也不是可運行的程式的解決方法: 1、首先官網下載JDK的最新版本並安裝;2、進行系統環境變數配置,在path中添加jdk安裝的路徑;3、進入電腦命令行介面,輸入「java -v」出現版本號碼即可。

如何透過Linux命令列工具進行日誌聚合和統計? 如何透過Linux命令列工具進行日誌聚合和統計? Jul 30, 2023 pm 10:07 PM

如何透過Linux命令列工具進行日誌聚合和統計?在管理和維護Linux系統時,日誌記錄是非常重要的一項工作。透過日誌可以查看系統運作、排查問題以及進行效能分析。而對於大規模的系統,日誌的數量往往非常龐大,如何有效率地對日誌進行聚合和統計,成為了維運人員面臨的一個挑戰。在Linux系統中,我們可以利用命令列工具來進行日誌聚合和統計。以下將介紹幾個常用的命令列

See all articles