PHP 页面静态化

article/2025/10/29 9:15:14

前言

随着网站的内容的增多和用户访问量的增多,网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化。

一、页面静态化概念

  • 静态化定义

静态化就是指把原本的动态生成的 html 页面变成静态内容保存起来,当用户客户端请求的时候,直接返回静态页面,不用再经过服务渲染,不用查询数据库,可以大大减少服务器和数据库压力,显著提升网站性能。

  • 静态页面

静态页面,即静态网页,是实际存在的,无需经过服务器的编译,直接加载到客户浏览器上显示出来。静态页面需要占一定的服务器空间,且不能自主管理发布更新的页面,如果想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件修改(通过fso等技术例外)。常见的静态页面举例:.html扩展名的、.htm扩展名的。

  • 动态页面

动态页面是通过执行asp,php,jsp,.net等程序生成客户端网页代码的网页。 动态页面通常可以通过网站后台管理系统对网站的内容进行更新管理。发布新闻,发布公司产品,交流互动,博客,网上调查等,这都是动态网站的一些功能。也是我们常见的。 动态页面常见的扩展名有:.asp .php .jsp .cgi.aspx 等。 注意:动态页面的“动态”是网站与客户端用户互动的意思,而非网页上有动画的就是动态页面。

  • 静态化分类

  1. 从形式看:纯静态和伪静态

  1. 从范围看:整体静态化和局部静态

  • 静态化优点和缺点

优点:

  1. 适合 SEO,有利于搜索引擎收录

  1. 提升网站速度和稳定性

  1. 网站更加安全,HTML 页面避免 PHP 相关漏洞

缺点:

  1. 生成静态页面多,占用更多的存储空间

  1. 增加网站开发成本和维护成本

二、静态化实现

  • 认识 PHP Buffer

在php中,buffer其实就是缓冲区,一个内存地址空间,主要用于存储数据;默认是开启状态,大小默认4096,在php.ini文件中由output_buffering配置,只有当缓冲区满了或者 php 运行完毕,才将数据输出去。

php.ini 代码示例:

output_buffering = on
#打开output缓冲,默认打开的。

缓冲流程:

# 详细了解输出过程,大家可以自行查阅
1.打开了 php 输出缓存: echo,print -> php output_buffring -> server buffering -> browser buffering -> browser display
2.未打开 php 输出缓存: echo,print -> server buffering -> browser buffering -> browser display

  • 原生PHP输出(创建 index.php 文件,本地配置虚拟域名"www.test.vip")。

代码如下(示例):

<!DOCTYPE html>
<html lang="">
<head><meta charset="utf-8"><title>网页静态化</title>
</head>
<body>
<h1>排名</h1>
<ul><?php for ($i = 1; $i <= 5; $i++) { ?><li>No.<?php echo $i; ?></li><?php } ?>
</ul>
<?php ?>
</body>
</html>

请求如下(www.test.vip/index.php):

  • 使用PHP文件读写功能生成静态页面

代码如下(示例):

<?php
$data = '<!DOCTYPE html>
<html lang="">
<head><meta charset="utf-8"><title>网页静态化</title>
</head>
<body>
<h1>排名</h1>
<ul><li>No.1</li><li>No.2</li><li>No.3</li><li>No.4</li><li>No.5</li>
</ul>
</body>
</html>';$fp = fopen("index.html", "w");
if (!$fp) {echo "System Error";exit();
}
fwrite($fp, $data);
fclose($fp);
echo "生成 index.html 成功!";

其中"$data"数据是解析好的前端代码,若包含 PHP 原生代码是无法解析的,那如何把动态的 PHP 语言静态化?

  • PHP OB 缓存机制生成静态页面

代码如下(示例):

<?php
ob_start();
require_once('index.php'); // 引入模版文件
$data = ob_get_contents();
file_put_contents('index.html', $data); // 生成静态文件 index.html
ob_end_clean(); // 输出信息并清除缓存$fp = fopen("index.html", "w");
if (!$fp) {echo "System Error";exit();
}fwrite($fp, $data);
fclose($fp);
echo "生成 index.html 成功!";

涉及函数介绍

ob_start() // 打开输出控制缓冲,若 php.ini 已经开启,那么这里会开启一个新的输出缓冲区;
ob_get_length() // 返回输出缓冲区的长度
ob_get_level() // 返回输出缓冲区的嵌套级别
ob_get_status() // 返回输出缓冲区的状态(数组形式返回,默认返回最顶层,参数为true时返回所有)
ob_get_contents() // 返回输出缓冲区的内容
ob_get_clean() // 以字符串格式返回当前输出缓冲区并关闭输出缓冲,等价于ob_get_contents和ob_end_clean);
ob_end_clean() // 清空(擦除)缓冲区并关闭输出缓冲
ob_get_flush() // 以字符串返回输出缓冲区内容并关闭缓冲
ob_end_flush() // 冲刷出(送出)输出缓冲区内容缓冲并关闭输出缓冲

三、伪静态实现

  • 伪静态介绍

伪静态就是通过某些技术(如rewrite)把动态网页的URL地址伪装成静态网页URL地址,但实质上用户访问的还是动态网页,只不过URL地址看起来是符合静态网页地址特征,因此,用户及某些搜索引擎会误认为其是静态网页。

  • 伪静态实现

下面我们对"http://www.test.vip/web/article?id=1"地址分别在Nginx和Apache上做伪静态处理。

  1. Nginx 伪静态

(1)在nginx.conf 合适位置加入 rewrite 语句,代码如下:

rewrite ^/web/article/(\d).html$ /web/article.php?id=$1 last;

rewrite语法

指令语法:rewrite regex replacement [flag]
regex :表示正则匹配规则。
replacement :表示跳转后的内容。
flag :表示 rewrite 支持的 flag 标记。应用位置:server、location、ifregex
常用正则表达式:
字符    描述
\    将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用
^    匹配输入字符串的起始位置
$    匹配输入字符串的结束位置
*    匹配前面的字符零次或多次
+    匹配前面的字符一次或多次
?    匹配前面的字符零次或一次
.    匹配除“\n”之外的所有单个字符
(pattern)    匹配括号内的patternflag
标记符号    说明
last       本条规则匹配完成后继续向下匹配新的location URL 规则
break      本条规则匹配完成后终止,不在匹配任何规则
redirect   返回302临时重定向
parmanent  返回301永久重定向

  1. Apache 伪静态

(1)在Apache配置文件httpd.conf 中启用Rewrite,去除前面的"#",使apache支持 mod_rewrite 模块,代码如下:

LoadModule rewrite_module modules/mod_rewrite.so

(2)在服务器找到配置文件vhosts.conf,启用 .htaccess,打开虚拟机配置文件vhosts.conf,找到其中的"AllowOverride"项,将它的值修改为All。

(3)完成修改后保存,并重新启动Apache服务器,使修改生效。

(4)接下来在项目的根目录下创建一个.htaccess 文件,实现对PHP文件后缀的隐藏操作。.htaccess文件的格式如下:

< IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteRule index.html index.php
RewriteRule ^/article/(\d+).html$ /web/article.php?id=$1
# 更多伪静态规则
< /IfModule>


http://chatgpt.dhexx.cn/article/KAfH3oYv.shtml

相关文章

页面静态化

前言 我们在使用购物网站的时候&#xff0c;会选择相应的商品点击查看详情&#xff0c;其实会发现每件商品的商品详情页面都是差不多的&#xff0c;除了一些数据外&#xff0c;其余结构布局都是一模一样的&#xff0c;那么是为每件商品都写一个详情页面吗&#xff1f;很显然这…

img标签图片自适应的样式

问题&#xff1a; img标签宽高固定的情况下&#xff0c;上传的图片尺寸不一致&#xff0c;会导致图片被拉伸变形&#xff0c;影响页面美观。 解决方法&#xff1a; 用css3的object-fit 属性、object-position 属性可以解决&#xff0c;代码如下&#xff1a; <!DOCTYPE htm…

图片自适应屏幕大小

有时候美工给过来的图片不规范&#xff0c;用户手机屏幕大小不一样。可能导致在不同的用户手机上显示效果不一样&#xff0c;这时候需要对图片的显示做自适应。 一把来说自适应可以根据需求&#xff0c;做成宽高固定显示屏幕大小。但对于一些长图可能出现图片被压缩在一个屏幕…

响应式图像--图片自适应大小

Foreword 做项目的过程中遇到了一个图片拉伸的问题&#xff0c;做的是手机端的页面&#xff0c;当让其以电脑端页面显示的时候&#xff0c;图片被拉伸的有那么点丑&#xff01;所以改改它&#xff01; Why 为什么会出现这样的情况呢&#xff1f; 1、因为图片是放在盒子…

HTML网页图片背景以及图片自适应设置

关于HTML网页图片背景以及图片自适应设置 Test 1 背景图片需要用到标签中的background属性 图片背景需要显示的位置是网页的身体部分即在body中显示&#xff0c;因此background属性应该放在body标签内 本次使用图片的大小为4808*2704像素&#xff0c;这是图片原来的样子 这是…

html图片自动适应,css如何让图片自适应?

要使图片能够自适应显示&#xff0c;我们一般可以通过设置CSS样式&#xff0c;让图片作为父元素的背景图片&#xff0c;再设置相关属性来实现。下面我们来看一下使用css设置图片自适应的方法。 css设置图片自适应示例&#xff1a; HTML代码&#xff1a;title css代码&#xff1…

【前端】js实现图片自适应

前言&#xff1a; 前几天写第一版代码的时候&#xff0c;测试跟我说&#xff0c;你这用户上传图片显示有问题啊&#xff0c;图像不是被拉宽就是被拉长了&#xff0c;不行啊。因为我给el-image设计的是固定长宽&#xff0c;如果图片不是这个比例&#xff0c;那直接就会变形了&am…

谈一下图片的自适应

在工作中经常遇到要求图片自适应的需求&#xff0c;下面就谈一下我在工作中经常使用的一些方法 单独使用img标签的情况 单独使用img的时候&#xff0c;可以只设置width就可以了&#xff0c;height不用设置&#xff0c;因为img不设置height&#xff0c;它会自动根据图片的比例…

浅谈图片宽度自适应解决方案

在网页设计中&#xff0c;随着响应式设计的到来&#xff0c;各种响应式设计方案层出不穷。对于图片响应式的问题也有很多前端开发人员在进行研究。比较好的图片响应式设想便是在不同的屏幕分辨率下使用不同实际尺寸的图片&#xff0c;而达到在高速网络环境中使用大或超大高清图…

浅谈图片展示、图片自适应解决方案

文章目录 导读CSS 解决方案background-size&#x1f437;background-size: contain&#xff1b;&#x1f437;background-size&#xff1a;100%&#xff1b;&#x1f437;background-size:cover; object-fit&#x1f437;object-fit: contain&#xff1b;&#x1f437;object-f…

实时即未来,大数据项目车联网之项目基石与前瞻【一】

文章目录 写在前面车联网项目全新升级 车联网行业背景介绍车联网技术汽车行业新能源汽车 车联网行业技术车辆网行业产业链与国内知名企业 车联网项目车联网技术架构和技术选型车联网项目的架构搭建 写在前面 车联网项目全新升级 更全 8-》21篇 更细 -》 图文并茂、部分代码首…

开发一个大数据项目的架构与流程

如果我们想做一个数据分析项目&#xff0c;我们就应该清楚数据的处理流程。 我们大致可以分为: 数据采集——数据存储——数据清洗——数据分析——数据可视化和数据挖掘、二次分析 在以上流程处理完成之后&#xff0c;会进入调度阶段&#xff1a;将数据采集、清洗、分析、导出…

大数据项目大致流程

1、提出需求-需要和多个部门负责人进行协商&#xff1a;关于项目的可行性分析 2、需求分析-进行需求调研&#xff08;研究竞品&#xff09;、市场调研&#xff0c;如果是给甲方做产品&#xff0c;需要和甲方协商需求细则 3、技术选型-需要多个开发部门的人员参与协商 考虑的…

大数据项目之电商数仓、数据仓库概念、项目需求及架构设计

文章目录 1.数据仓库概念2. 项目需求及架构设计2.1 项目需求分析2.1.1 采集平台2.1.2 离线需求2.1.3 实时需求2.1.4 思考题 2.2 项目框架2.2.1 技术选型2.2.2 系统数据流程设计2.2.3 框架版本选型2.2.3.1 Apache框架版本 2.2.4 服务器选型2.2.4.1 物理机&#xff1a;2.2.4.2 云…

大数据项目开发进度(实时更新)

文章目录 前言项目概述项目进度第一周0525-0529&#xff1a;第二周0601-0605&#xff1a;第三周0608-0612&#xff1a;第四周0615-0621&#xff1a;&#xff08;周末加班&#xff09;第五周0622-0628&#xff1a;&#xff08;周末加班&#xff09;第六周0629-0705&#xff1a;&…

大数据项目需求分析

以大数据项目为主线&#xff0c;技术理论与项目实践相结合&#xff0c;按照大数据项目的开发流程逐步推进&#xff0c;本文主要讲解项目的需求分析、架构设计以及离线和实时数据流程设计&#xff0c;然后提前规划好大数据项目需要的集群&#xff0c;按照项目的实现逻辑&#xf…

大数据项目篇--项目架构图

文章目录 离线架构离线架构-表信息离线架构-ETL信息 实时架构 离线架构 离线架构-表信息 离线架构-ETL信息 实时架构

客快物流大数据项目学习框架

文章目录 客快物流大数据项目学习框架 前言 一、项目简介 二、功能介绍 三、项目背景 四、服务器资源规划 五、技术亮点及价值 六、智慧物流大数据平台 客快物流大数据项目学习框架 前言 利用框架的力量&#xff0c;看懂游戏规则&#xff0c;才是入行的前提 大多数人…

大数据项目流程

一、项目流程 1&#xff09;需求概况&#xff1a;实现目标是什么&#xff1f; ——— 通过大数据获取什么信息 2&#xff09;需求分析&#xff1a;用什么样的数据&#xff0c;实现什么样的效果。 数据源的考量&#xff08;数据的种类和量的大小&#xff09;&#xff0c;数据…