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

PHP 生成靜態 HTML 頁面實現方案:模板替換與批量生成完整代碼

     編輯:PHP 綜合知識

靜態化優勢

  • SEO 友好:搜索引擎爬蟲更易抓取靜態頁面
  • 性能提升:減少數據庫查詢與 PHP 解析開銷,直接由 Web 服務器靜態文件服務
  • 安全性:隱藏數據庫結構與參數,降低 SQL 注入風險

核心實現邏輯

function GenerateHTML($Date, $Time, $Content, $Title, $Name) {
    // 1. 解析日期時間生成文件名:20121028210632.html
    $GetDateRow = explode("-", $Date);
    $GetTimeRow = explode(":", $Time);
    $FileName = $GetDateRow[0].$GetDateRow[1].$GetDateRow[2].
                $GetTimeRow[0].$GetTimeRow[1].$GetTimeRow[2].".html";
    
    // 2. 讀取模板文件
    $FP = fopen("tmp.html", "r");
    $Str = fread($FP, filesize("tmp.html"));
    fclose($FP);
    
    // 3. 模板佔位符替換
    $Str = str_replace("{Title}", $Title, $Str);
    $Str = str_replace("{Content}", $Content, $Str);
    $Str = str_replace("{Name}", $Name, $Str);
    $Str = str_replace("{Date}", $Date, $Str);
    $Str = str_replace("{Time}", $Time, $Str);
    
    // 4. 寫入靜態文件
    $Handle = fopen($FileName, "w");
    fwrite($Handle, $Str);
    fclose($Handle);
}

// 批量生成
$querysql = "select * from article";
$queryset = mysql_query($querysql);
while ($row = mysql_fetch_array($queryset)) {
    GenerateHTML($row['date'], $row['time'], $row['content'], $row['title'], $row['name']);
}

模板文件 tmp.html 示例

<html>
<head><title>{Title}</title></head>
<body>
<h1>{Title}</h1>
<p>作者:{Name} 發布時間:{Date} {Time}</p>
<div>{Content}</div>
</body>
</html>

代碼審視與改進建議

問題風險建議
使用 mysql_* 系列函數PHP 7.0+ 已移除改用 PDO 或 mysqli
文件名衝突風險同秒多篇文章覆蓋引入微秒/隨機後綴或自增 ID
無輸出目錄管理根目錄文件過多影響性能按年月建立子目錄
模板替換簡陋不支援邏輯判斷、循環引入 Smarty/Twig/Blade 模板引擎
無錯誤處理文件讀寫失敗靜默失敗添加 try-catch 與日誌記錄

現代化重構方向

  1. 模板引擎:使用 Twig 提供繼承、塊、過濾器等高級功能
  2. 異步生成:寫入消息隊列,Worker 進程消費生成,不阻塞主請求
  3. CDN 同步:生成後自動推送至 CDN 邊緣節點
  4. 增量更新:僅重新生成變更的文章,配合文件修改時間判斷
  5. 部署腳本:整合到 CI/CD 流程,構建階段批量預生成

總結

本文展示了 PHP 靜態頁生成的基礎實現原理:模板讀取 → 佔位符替換 → 文件寫入。雖然代碼使用了已棄用的 mysql 擴展,但核心邏輯對理解靜態化機制仍有參考價值。實際項目請採用現代框架(Laravel/Symfony/ThinkPHP)配合成熟模板引擎與隊列系統實現。

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