You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP模板加载自定义页面(仅维护TXT文件)

用单一PHP模板加载所有TXT内容的实现方案

我来帮你搞定这个冗余问题!你的思路完全正确——通过GET请求传递TXT文件路径给通用模板,就能彻底淘汰那些重复的PHP文件,只维护TXT内容即可。下面一步步教你具体实现:

1. 重构内容链接:指向模板并传递TXT路径

原来你是给每个内容写单独的PHP文件,现在把所有内容链接都改成指向你的通用模板文件(比如命名为template.php),通过?file=参数传递对应的TXT文件路径。

举个例子:

  • 原来的链接:<a href="./content/006wakeWeRide.php">The Wake We Ride</a>
  • 现在改成:<a href="template.php?file=contentTxt/006wakeWeRide.txt">The Wake We Ride</a>

如果内容很多不想手动改,后面我会教你自动生成这个列表的方法。

2. 编写通用模板文件(template.php)

这是核心部分,负责接收GET参数、读取TXT文件、解析内容并渲染HTML。

第一步:安全获取并校验TXT文件路径

一定要加安全校验! 防止恶意用户通过目录遍历访问服务器上的其他文件:

<?php
// 获取传入的TXT文件路径,可设置默认文件(比如首页内容)
$txtFile = $_GET['file'] ?? 'contentTxt/default.txt';

// 限制只能访问contentTxt目录下的文件
$allowedDir = realpath('contentTxt');
$targetFile = realpath($txtFile);

// 校验文件是否在允许的目录内,且是txt文件
if (!$targetFile || strpos($targetFile, $allowedDir) !== 0 || pathinfo($targetFile, PATHINFO_EXTENSION) !== 'txt') {
    die("无效的内容请求!");
}

// 读取TXT文件内容,忽略换行符更方便处理
$myContent = file($targetFile, FILE_IGNORE_NEW_LINES);
?>

第二步:解析TXT头部和正文

根据你给出的TXT格式,提取头部信息和正文内容:

<?php
// 解析TXT头部字段
$contentType = $myContent[0] ?? 'txt';
$title = $myContent[1] ?? '未命名内容';
$author = $myContent[2] ?? '匿名作者';
$date = $myContent[3] ?? '未知日期';
$thumbnail = $myContent[4] ?? '';

// 提取正文:从第7行开始(对应数组索引6,因为数组从0计数)
$bodyParagraphs = array_slice($myContent, 6);
?>

第三步:渲染HTML页面

把解析好的变量插入到你的模板HTML中,记得用htmlspecialchars()转义内容防止XSS攻击:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title><?php echo htmlspecialchars($title); ?></title>
    <!-- 这里可以引入你的通用CSS样式 -->
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="content-container">
        <header class="content-header">
            <h1><?php echo htmlspecialchars($title); ?></h1>
            <div class="meta-info">
                <span>作者:<?php echo htmlspecialchars($author); ?></span>
                <span>日期:<?php echo htmlspecialchars($date); ?></span>
            </div>
            <?php if (!empty($thumbnail)): ?>
                <img src="<?php echo htmlspecialchars($thumbnail); ?>" alt="<?php echo htmlspecialchars($title); ?> 缩略图" class="thumbnail">
            <?php endif; ?>
        </header>
        <main class="content-body">
            <?php foreach ($bodyParagraphs as $paragraph): ?>
                <p><?php echo htmlspecialchars($paragraph); ?></p>
            <?php endforeach; ?>
        </main>
    </div>
</body>
</html>

3. 自动生成内容列表(可选但高效)

如果你的内容很多,手动写链接太麻烦,可以做一个列表页面(比如index.php),自动遍历contentTxt目录下的所有TXT文件,读取标题并生成链接:

<?php
$allowedDir = realpath('contentTxt');
// 获取目录下所有txt文件
$txtFiles = glob($allowedDir . '/*.txt');
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>全部内容列表</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="list-container">
        <h1>全部内容</h1>
        <ul class="content-list">
            <?php foreach ($txtFiles as $file): ?>
                <?php
                // 读取文件前两行获取标题
                $lines = file($file, FILE_IGNORE_NEW_LINES);
                $contentTitle = $lines[1] ?? basename($file, '.txt');
                // 生成相对路径用于GET参数
                $relativePath = str_replace(realpath('./') . '/', '', $file);
                ?>
                <li>
                    <a href="template.php?file=<?php echo urlencode($relativePath); ?>">
                        <?php echo htmlspecialchars($contentTitle); ?>
                    </a>
                </li>
            <?php endforeach; ?>
        </ul>
    </div>
</body>
</html>

关键注意事项

  • 安全第一:永远不要信任用户传入的参数,必须做目录和文件类型校验,防止目录遍历和XSS攻击。
  • 兼容性:如果你的TXT文件有特殊编码(比如GBK),可以在file()函数前加上mb_internal_encoding('UTF-8'),或者用file_get_contents()配合编码转换。
  • 错误处理:可以给file()函数加错误捕获,比如用@file()或者try-catch,避免文件不存在时抛出错误。

内容的提问来源于stack exchange,提问作者DMrFrost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:13:02