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

PHP 靜態頁面生成教學:字串替換模板標籤實作

     編輯:PHP 相關知識

PHP 靜態頁面生成教學:字串替換模板標籤實作

透過預先設計含佔位符的 HTML 模板,使用 str_replace 將標籤替換為動態資料,快速生成靜態頁面,降低資料庫查詢壓力。

模板檔 template.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{site_title} - 範例網站</title>
</head>
<body>
<h1>{site_title}</h1>
<iframe src="{site_url}" width="100%" height="800"></iframe>
</body>
</html>

生成腳本 generate.php

<?php
header('Content-Type: text/html; charset=utf-8');

$title = "PHP 動態生成靜態頁面範例";
$url = "https://example.com";

$templateFile = 'template.html';
$outputFile = 'static_page.html';

$fp = fopen($templateFile, 'r');
$content = fread($fp, filesize($templateFile));
fclose($fp);

// 替換標籤
$content = str_replace('{site_title}', $title, $content);
$content = str_replace('{site_url}', $url, $content);

$handle = fopen($outputFile, 'w');
fwrite($handle, $content);
fclose($handle);

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

進階擴充:支援迴圈與條件

<?php
function renderTemplate($tpl, $data) {
    // 簡易區塊替換 {block:items}...{/block}
    if (preg_match('/\{block:(\w+)\}(.*?)\{\/block:\1\}/s', $tpl, $m)) {
        $blockName = $m[1];
        $blockTpl = $m[2];
        $items = $data[$blockName] ?? [];
        $rendered = '';
        foreach ($items as $item) {
            $itemHtml = $blockTpl;
            foreach ($item as $k => $v) {
                $itemHtml = str_replace("{$blockName}.$k", $v, $itemHtml);
            }
            $rendered .= $itemHtml;
        }
        $tpl = str_replace($m[0], $rendered, $tpl);
    }
    // 單一變數替換
    foreach ($data as $k => $v) {
        if (!is_array($v)) {
            $tpl = str_replace("{$k}", $v, $tpl);
        }
    }
    return $tpl;
}

// 使用範例
$template = file_get_contents('list_tpl.html');
$data = [
    'page_title' => '商品列表',
    'items' => [
        ['items.name'=>'商品A', 'items.price'=>100],
        ['items.name'=>'商品B', 'items.price'=>200],
    ]
];
echo renderTemplate($template, $data);
?>

優缺點比較

優點缺點
零依賴、效能極佳邏輯複雜時模板難以維護
易於理解與除錯缺乏模板繼承、區塊覆蓋等進階功能
生成純靜態 HTML,適合 CDN 快取大量資料替換記憶體佔用高

生產環境建議

  • 搭配 ob_start() 捕獲輸出,避免直接輸出
  • 引入 Smarty、Twig、Blade 等成熟模板引擎處理複雜邏輯
  • 靜態頁面部署至 Nginx 靜態資源目錄,配合快取策略
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved