在高流量的 PHP 應用中,動態頁面的重複渲染會消耗大量伺服器資源。將常用頁面靜態化為 HTML 檔案,能大幅降低資料庫查詢與模板解析的開銷。本文介紹一個功能完善的 Html 類,支援多種目錄結構與檔案命名策略,適合快速整合至既有專案。
| 屬性 | 用途 |
|---|---|
| $dir | 當前生成的 HTML 目錄(不含尾斜線) |
| $rootdir | 靜態檔案根目錄,預設 html |
| $name | 完整的靜態檔案路徑 |
| $dirname | 自訂子目錄名稱 |
| $url | 來源動態頁面 URL |
| $time | 生成時間戳,用於目錄與命名 |
| $dirtype | 目錄類型:name、year、month、day |
| $nametype | 命名類型:name、time、query、namequery、nametime |
__construct($nametype='name', $dirtype='year', $rootdir='html')setvar($nametype, $dirtype, $rootdir)getdir($dirname='', $time=0)$dirtype 計算目標目錄並自動建立,回傳目錄路徑。getname($url='', $time=0, $dirname='')$nametype 產生完整檔案路徑。createhtml($url='', $time=0, $dirname='', $htmlname='')$url 內容並寫入靜態檔。若提供 $htmlname 則使用自訂檔名。deletehtml($url='', $time=0, $dirname='')deletedir($file)<?php
require_once 'Html.class.php';
// 初始化:按年月目錄、URL檔名+查詢字串命名
$html = new Html('namequery', 'month', 'cache/html');
// 生成靜態頁
$sourceUrl = 'https://example.com/article.php?id=123&page=2';
if ($html->createhtml($sourceUrl)) {
echo "靜態頁已生成:" . $html->name;
} else {
echo "生成失敗";
}
// 手動指定檔名生成
$html->createhtml($sourceUrl, 0, '', 'special-page.htm');
// 刪除快取
$html->deletehtml($sourceUrl);
?>
file() 讀取遠端 URL 需開啟 allow_url_fopen;生產環境建議改用 cURL 並加入超時與重試機制。flock)或採用臨時檔 + rename 原子操作。deletehtml(),或排程定期清理過期目錄。這個 Html 類提供了開箱即用的靜態化能力,代碼結構清晰、擴充性佳。透過合理配置目錄與命名策略,可輕鬆應對內容型網站、電商商品頁、部落格文章等高讀低寫場景,顯著提升首屏載入速度與伺服器吞吐量。