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

PHP 生成靜態 HTML 檔案完整方法總結

     編輯:PHP 綜合知識

將動態頁面靜態化可大幅降低伺服器負載、提升前端效能。本文總結三種主流生成靜態 HTML 的方法,從基礎輸出緩衝到 Smarty 模板整合,附完整程式碼與優缺點分析。

方法一:基礎輸出緩衝

<?php
ob_start(); // 開啟輸出緩衝
// ... 頁面邏輯與輸出 ...
$temp = ob_get_contents(); // 取得緩衝內容
ob_end_clean();            // 關閉並清空緩衝

$fp = fopen('page.html', 'w');
fwrite($fp, $temp) or die('寫入失敗');
fclose($fp);
?>

方法二:帶快取過期機制(推薦)

<?php
$cacheFile = 'page.html';
$cacheTime = 30 * 60; // 30 分鐘

// 快取存在且未過期 → 直接導向靜態頁
if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < $cacheTime)) {
    header("Location: $cacheFile");
    exit;
}

ob_start();
// ... 頁面邏輯與輸出 ...
$temp = ob_get_contents();
ob_end_clean();

$fp = fopen($cacheFile, 'w');
fwrite($fp, $temp) or die('寫入失敗');
fclose($fp);

header("Location: $cacheFile");
?>

方法三:表單提交生成(含目錄自動建立)

<?php
// 取得表單資料
$title = $_POST['htmltitle'];
$body  = $_POST['htmlbody'];

// 組裝 HTML
$html = "<html><head><title>$title</title></head><body>$body</body></html>";

// 以日期建立目錄
$dir = date('Y-m-d');
if (!is_dir($dir)) mkdir($dir, 0777);

// 以時間戳命名檔案
$file = $dir . '/' . date('YmdHis') . '.html';
$fp = fopen($file, 'w');
fwrite($fp, $html);
fclose($fp);

echo "<script>alert('生成成功'); location.href='list.php';</script>";
?>

方法四:Smarty 模板整合

<?php
require_once 'Smarty.class.php';
$smarty = new Smarty();

$id = $_GET['id'];
$row = $db->getRow("SELECT * FROM news WHERE id=$id");
$smarty->assign('title', $row['title']);
$smarty->assign('content', $row['content']);

// 取得渲染後內容(不直接輸出)
$content = $smarty->fetch('news_detail.tpl');

// 寫入靜態檔
$file = "news/$id.html";
$fp = fopen($file, 'w');
fwrite($fp, $content);
fclose($fp);
?>

Smarty 進階:使用 fetch 方法

<?php
$content = $smarty->fetch('template.tpl', $cache_id, $compile_id, false);
// 參數:模板名、快取ID、編譯ID、是否直接顯示
// false 表示回傳字串而非輸出
?>

方法比較與選擇建議

方法優點缺點適用場景
基礎 ob_start簡單、無相依無快取機制、每次重生成極簡頁面、臨時需求
快取過期機制效能好、自動更新需管理快取檔案權限內容型網站、文章頁
表單生成後台編輯即時生成需人工觸發CMS 後台發文流程
Smarty 整合模板分離、易維護需學習模板語法中大型專案、團隊開發

生產環境注意事項

  • 檔案寫入需確保目錄權限(chmod 777 或指定使用者群組)
  • 大量並發生成時建議使用訊息佇列非同步處理
  • 靜態檔案部署至 CDN 或獨立靜態伺服器,減輕應用伺服器壓力
  • 定期清理過期/失效靜態檔案,避免佔用磁碟空間
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved