PHP生成HTML静态页原理

  在PHP中生成HTML文件静态页,在后续的访问可以直接加载静态文件而无需再次执行PHP脚本。这可以提高网站性能,减轻服务器负担,并改善页面加载速度。

  用一个简单的小项目来说明PHP生成HTML静态页原理,包含:模板分离、自动创建目录、生成静态页、更新静态页、删除静态页、生成列表页+详情页、防重复生成、错误提示等功能。

  项目结构

/
├── template/           # 模板文件夹
│   ├── index.html      # 首页模板
│   └── article.html    # 文章详情页模板
├── html/               # 自动生成的静态页存放目录(自动创建)
└── create_html.php     # 生成静态页核心程序

  首页模板:template/index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>{site_name}</title>
</head>
<body>
    <h1>{site_name}</h1>
    <p>网站描述:{site_desc}</p>
    <h3>最新文章列表</h3>
    <ul>
        {article_list}
    </ul>
</body>
</html>

  文章详情模板:template/article.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>{title}</title>
</head>
<body>
    <h1>{title}</h1>
    <p>发布时间:{add_time}</p>
    <div style="margin:20px 0;">{content}</div>
    <a href="index.html">返回首页</a>
</body>
</html>

  核心生成程序:create_html.php

<?php
// 生成静态页核心类
class CreateHtml
{
    // 模板和静态页存放目录
    private $tpl_dir = 'template/';
    private $html_dir = 'html/';

    public function __construct()
    {
        // 自动创建静态页目录
        if (!is_dir($this->html_dir)) {
            mkdir($this->html_dir, 0755, true);
        }
    }

    /**
     * 生成静态页面
     * @param  string $tpl_file 模板文件
     * @param  string $html_file 生成的静态文件
     * @param  array  $data 要替换的数据
     * @return bool
     */
    public function make($tpl_file, $html_file, $data = [])
    {
        // 读取模板
        $tpl_path = $this->tpl_dir . $tpl_file;
        if (!file_exists($tpl_path)) {
            die("模板不存在:" . $tpl_path);
        }
        $html = file_get_contents($tpl_path);

        // 替换变量
        foreach ($data as $key => $val) {
            $html = str_replace('{' . $key . '}', $val, $html);
        }

        // 写入静态文件
        $save_path = $this->html_dir . $html_file;
        $res = file_put_contents($save_path, $html);

        return $res ? true : false;
    }

    // 删除静态页
    public function del($html_file)
    {
        $path = $this->html_dir . $html_file;
        return file_exists($path) ? unlink($path) : true;
    }
}


// 使用示例(模拟从数据库读取数据)
$html = new CreateHtml();

// 生成首页
$index_data = [
    'site_name' => '我的完善版静态网站',
    'site_desc'  => '基于PHP生成的纯HTML静态页面',
    'article_list' => ''
];

// 模拟文章数据
$article_list = [
    ['id' => 1, 'title' => 'PHP生成静态页原理详解', 'add_time' => date('Y-m-d H:i:s')],
    ['id' => 2, 'title' => '静态页面优化与SEO技巧', 'add_time' => date('Y-m-d H:i:s')],
    ['id' => 3, 'title' => 'PHP模板替换高级用法', 'add_time' => date('Y-m-d H:i:s')],
];

// 拼接文章列表
foreach ($article_list as $vo) {
    $index_data['article_list'] .= "<li><a href='article_{$vo['id']}.html'>{$vo['title']}</a> ({$vo['add_time']})</li>";
}

// 生成首页
$res = $html->make('index.html', 'index.html', $index_data);
echo $res ? "首页生成成功!<br>" : "首页生成失败!<br>";

// 批量生成文章详情页
foreach ($article_list as $vo) {
    $detail_data = [
        'title'    => $vo['title'],
        'add_time' => $vo['add_time'],
        'content'  => "这是文章【{$vo['id']}】的详细内容,功能完善版PHP静态页生成,支持列表+详情页、自动创建目录、增删改查。"
    ];
    $html_file = "article_{$vo['id']}.html";
    $res = $html->make('article.html', $html_file, $detail_data);
    echo $res ? "文章 {$vo['id']} 生成成功!<br>" : "文章 {$vo['id']} 生成失败!<br>";
}

// 删除静态页示例
// $html->del('article_1.html');
// echo "已删除静态页:article_1.html<br>";
?>

本站原创内容,转载请注明来源:https://www.liutonghui.com/60.html

打工人怎么做副业项目
上一篇 2014-02-09
PHP和HTML代码分离
下一篇 2014-04-23

评论列表(0条)

  • 暂无评论

发表评论

captcha

相关推荐

  • PHP使用内置函数处理JSON数据

      JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通常用于在前端和后端之间传递数据。在PHP中,你可以使用内置的函数来处理JSON数据,实现数据的编码和解码。   以下是PHP中JSON的一些常见应用:   1. 编码(PHP对象转为JSON字符串)   使用 json_encode() 函数可以将PHP对象转换为JSON格式的字符串: $data = array( 'name' =......

    2013-10-09
    16780
  • PHP和HTML代码分离

      在这之前,我们开发 PHP 程序的时候,都是 HTML 和 PHP 混合写在一起的。但是代码混写会有一些问题,比如说:表单页和 PHP 页如果写在一起的话,页面运行时就会马上执行写入操作,而这个时候表单还没有提交。另外,表单提交以后,也不需要再显示表单页了。于是就有了判断。 if($_POST) { //处理提交后的数据 } else { //显示表单 }   用 if 把程序分成两个流程。   在显示表单的时候。中......

    2014-04-23
    23130
  • 净月静悦

      远离城市的热闹喧嚣,远离那些是是非非。我喜欢安静,安静可以让我更专注的思考,只想安安静静的放空自己,感受只有大自然最原本的形态。望向远处成片的山林,空气格外清新。潭水安安静静的,水面平平缓缓,听着风吹树叶和湖水荡漾的声音,让人清静又自在。   在这一刻,什么妖魔鬼怪,什么牛鬼蛇神,什么名利算计,恩怨是非,什么真真假假,谎言吹嘘,小丑窜跳,通通灰飞烟灭。 ......

    2016-06-29
    22420
  • PHP框架的实现原理

      PHP框架的实现原理是通过采用MVC模式、路由机制、依赖注入、模板引擎和数据库操作等技术,构建一个结构清晰、易于维护和扩展的应用程序框架。下面是一个简单的PHP框架示例,演示了基本的实现原理:   简单的PHP框架文件结构 /simple_framework |-- app | |-- controllers | | |-- HomeController.php | |-- models | | ......

    2017-10-04
    15502
  • Web页面切换深色模式的实现原理

      要实现页面切换深色模式并记住用户使用的模式,可以结合使用 JavaScript 和本地存储(LocalStorage 或 Cookies)。以下是一个简单的示例:   HTML 页面结构: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;meta name="viewport" content......

    2019-06-26
    20742
  • PHP生成任意尺寸并居中裁剪缩略图的函数

      在项目中经常需要对图片进行各种处理,比如生成缩略图,并且生成的缩略图还要保持原有图片的宽高比例不变形,下面就分享一个非常好用的PHP生成缩略图函数,可以手动输入自定义尺寸并居中裁剪保持图片比例不变形,代码如下: &lt;?php // 应用公共文件 /** * 居中裁剪图片 * @param string $source [原图路径] * @param int $width [设置宽度] * @param int $heig......

    2020-10-03
    19932
  • PHP使用QR Code生成二维码实例

      要在PHP中生成二维码,可以使用第三方库,其中一个流行的是PHP QR Code库。以下是一个简单的示例,演示如何使用PHP QR Code库生成二维码。   使用 Composer 安装 PHP QR Code: composer require chillerlan/php-qrcode   PHP 生成二维码示例 &lt;?php // 引入 Composer 的自动加载文件 require_once 'vendor/aut......

    2021-10-07
    17750
  • ThinkPHP路由简单配置

      ThinkPHP拥有丰富的路由配置功能,灵活的配置路由可以更好的优化URL结构,方便维护,下面简单介绍一下ThinkPHP路由配置方法。   ThinkPHP默认路由结构为/入口文件/应用/控制器/方法,因此就产生了这样一长串的URL结构: https://127.0.0.2/index.php/index/index/index   这还仅仅是首页URL,这样的结构显然不利于维护,更不利于SEO,所以需要做路由配置,以多应用为例,......

    2025-04-21
    7500