首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

個人網頁自動化產生系統:MySQL 儲存 + 模板引擎 + 靜態頁生成

     編輯:PHP 相關知識

早期 PHP 靜態頁生成系統範例:表單提交文章存入 MySQL,讀取模板檔案替換變數,產出靜態 HTML 檔案。本文整理核心流程、資料表設計、模板替換邏輯、計數器機制,並指出現代化改進方向。

資料表設計:wenzhang

CREATE TABLE wenzhang (
    id      SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
    timu    VARCHAR(200) NOT NULL,      -- 標題
    zuozhe  VARCHAR(18) NOT NULL,       -- 作者
    laiyuan VARCHAR(40) NOT NULL,       -- 來源
    textt   TEXT NOT NULL,              -- 內容
    riqi    DATETIME NOT NULL,          -- 日期
    PRIMARY KEY (id)
);

核心流程

  1. input.php:顯示發文表單
  2. shengcheng.php:接收表單 → 寫入資料庫 → 讀取模板 → 變數替換 → 產出靜態 HTML → 更新計數器

shengcheng.php 關鍵邏輯

<?php
$db = mysql_connect('localhost', 'root');
mysql_select_db('study', $db);

// 1. 寫入資料庫 (注意:實際應用必須用預備陳述式防注入)
$t = date('Y-m-d H:i:s');
$sql = "INSERT INTO wenzhang (timu, zuozhe, laiyuan, textt, riqi) 
        VALUES ('$timu', '$zuozhe', '$laiyuan', '$textt', '$t')";
mysql_query($sql);

// 2. 計數器 (檔案鎖定機制缺失,併發下會丟失)
$count = (int)file_get_contents('count.txt') + 1;
file_put_contents('count.txt', $count);

// 3. 讀取三段模板
$tpl1 = file_get_contents('muoban1.txt'); // HTML 頭部 + 標題位置
$tpl2 = file_get_contents('muoban2.txt'); // 內容區塊前綴
$tpl3 = file_get_contents('muoban3.txt'); // HTML 尾部

// 4. 組合中繼資訊
$meta = "<br>作者:<font color='#306800'>$zuozhe</font> 
         來源:<font color='#306800'>$laiyuan</font> 
         時間:<font color='#336600'>$t</font><br>";

// 5. 產出最終內容
$content = $tpl1 . $timu . $meta . $tpl2 . $textt . $tpl3;

// 6. 寫入靜態檔案 (檔名: 計數器.html)
$filename = $count . '.html';
file_put_contents($filename, $content);

echo "<center><b>提交成功</b></center>";
?>

模板檔案結構

  • muoban1.txt:<html><head>...</head><body><h1> (標題插入點)
  • muoban2.txt:</h1><div class='content'> (內容前綴)
  • muoban3.txt:</div></body></html>

關鍵缺陷與現代化改進

問題風險現代解決方案
mysql_* 函數已移除 (PHP 7+)PDO / MySQLi + 預備陳述式
SQL 直接拼接變數SQL 注入參數綁定 $stmt->execute([$timu, $zuozhe, ...])
計數器檔案無鎖併發丟號/重複資料庫 AUTO_INCREMENT / Redis INCR
模板簡單字串拼接難維護、易 XSSTwig / Blade / Latte 模板引擎 (自動轉義)
靜態檔案直接寫入 Web 目錄權限、部署、快取問題生成至獨立目錄,Nginx 靜態服務 + CDN
無分頁、無分類、無搜尋功能極簡引入框架 (Laravel/Symfony) 或 CMS (WordPress/Typecho)

現代靜態站點生成器推薦

  • PHP:Sculpin, Jigsaw, Statie
  • Node.js:Hexo, VuePress, Next.js (SSG)
  • Go:Hugo (極快)
  • Python:Pelican, MkDocs

此範例展示了「資料 + 模板 = 靜態頁」的核心思想,現代工具將此流程標準化、工程化、高效能化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved