目录结构:
/data/html/ └── 2026/ # 年份 └── 06/ # 月份 └── 25/ # 日期 ├── 000/ # 文章 ID 萬位與千位 (例如 ID: 000000 ~ 000999) │ ├── 123.html │ └── 999.html ├── 001/ # 文章 ID 萬位與千位 (例如 ID: 001000 ~ 001999) │ ├── 001.html │ └── 500.html └── 002/ # 當天剩餘的文章
根据目录生成静态页面示例:
<?php
/**
* 產生靜態 HTML 頁面並儲存至高效目錄結構中
*
* @param int $articleId 文章的唯一 ID (自增 ID)
* @param string $title 文章標題
* @param string $content 文章內容
* @param string $basePath 靜態檔案根目錄
* @return string|false 成功則傳回檔案完整路徑,失敗傳回 false
*/
function saveStaticPage(int $articleId, string $title, string $content, string $basePath = '/data/html') {
// 1. 取得目前的年、月、日
$year = date('Y');
$month = date('m');
$day = date('d');
// 2. 依據文章 ID 進行分群,每 1000 篇文章放一個資料夾
// 例如:ID 1234 -> 1234 / 1000 = 1.234 -> 取整數為 1 -> 補零變成 "001"
$groupId = str_pad((int)($articleId / 1000), 3, '0', STR_PAD_LEFT);
// 3. 組合出目標目錄路徑
// 格式如:/data/html/2026/06/25/001/
$targetDir = rtrim($basePath, '/') . "/{$year}/{$month}/{$day}/{$groupId}";
// 4. 檢查目錄是否存在,若不存在則遞迴建立 (包含 0755 權限)
if (!is_dir($targetDir)) {
if (!mkdir($targetDir, 0755, true)) {
error_log("無法建立目錄: {$targetDir}");
return false;
}
}
// 5. 組裝靜態網頁 HTML 模板
$htmlTemplate = <<<HTML
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>HTML_TITLE</title>
</head>
<body>
<h1>HTML_TITLE</h1>
<div class="content">
HTML_CONTENT
</div>
<hr>
<p>產出時間: CURRENT_TIME</p>
</body>
</html>
HTML;
// 取代模板內容
$htmlContent = str_replace(
['HTML_TITLE', 'HTML_CONTENT', 'CURRENT_TIME'],
[$title, $content, date('Y-m-d H:i:s')],
$htmlTemplate
);
// 6. 組合最終檔案路徑 (檔名可以直接用文章 ID)
$filePath = "{$targetDir}/{$articleId}.html";
// 7. 寫入檔案 (使用 LOCK_EX 防止併發寫入衝突)
if (file_put_contents($filePath, $htmlContent, LOCK_EX) !== false) {
return $filePath;
}
return false;
}
// ==================== 測試模擬運作 ====================
// 模擬今天新增了一篇 ID 為 54321 的文章
$articleId = 54321;
$title = "未來20年高效架構設計指南";
$content = "<p>這是一篇測試文章內容,採用了 Linux 檔案系統最優化的目錄結構儲存。</p>";
// 執行儲存 (測試時可以先改為目前有權限的目錄,如 ./test_html)
$resultPath = saveStaticPage($articleId, $title, $content, __DIR__ . '/test_html');
if ($resultPath) {
echo "頁面生成成功!儲存路徑為:\n" . $resultPath . "\n";
} else {
echo "頁面生成失敗。\n";
}nginx静态路由:
server {
listen 80;
server_name example.com;
# 你的靜態檔案根目錄
root /data/html;
index index.html;
# 當使用者訪問 /article/年/月/日/分組ID/文章ID.html 時
location ~ ^/article/(\d{4})/(\d{2})/(\d{2})/(\d{3})/(\d+)\.html$ {
# $uri 就是使用者請求的完整路徑,例如 /article/2026/06/25/054/54321.html
# Nginx 會先去 root 目錄下找有沒有這個檔案
# 如果檔案存在,直接由 Nginx 高效回傳(完全不驚動 PHP,速度極快)
# 如果檔案不存在(可能還沒生成),則最後一項 @fallback 會把請求丟給 PHP 補救
try_files $uri @fallback;
}
# 後備方案:如果靜態 HTML 檔案不存在,交給 PHP 即時生成或報錯
location @fallback {
# 轉發給你的入口 index.php,並把原本的網址帶過去
rewrite ^ /index.php?rewrite_url=$request_uri last;
}
# PHP-FPM 配置 (標準配置)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 依你的 PHP 版本修改
}
}最后
以上就是热心网友最近收集整理的关于一个高效静态页面目录结构和生成示例以及nginx静态路由的实现的全部内容,更多相关一个高效静态页面目录结构和生成示例以及nginx静态路由内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复