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