php生成静态页面并实现预览功能
作者:铁柱同学 发布时间:2023-11-15 08:37:11
一、前言
这篇文章主要是记录一下php生成静态页面的大致步骤,关于页面静态化,大家想必都听说过,但是真正用的时候反而不是很多。有些页面考虑到访问量比较大,页面结构又不常改动的,比如新闻公告等,可以考虑做成静态页面放在服务器上,这样第一是能抗住大流量的访问,第二也是更加安全一些,打开速度上有保证。
二、正文
1、什么是静态化
就比如我们平时写项目的时候,大部分的页面都是会传参数进去,通过php标签把这些参数展示出来。因为我们的参数随时可以变化,所以页面上的内容也跟着参数变化,这就是动态化的页面。与之相反,静态化就是纯粹的html,页面上的内容不需要通过php或者java等编程语言来改变。
关于静态化的优点,网上也都说的很清楚了,这边不再一一赘述,总之就是打开速度够快,能抗住大流量访问。
2、静态化写法
(1)第一种写法是通过ob_start()缓存来输出
在php文件中编写html代码,然后用bo_get_content获取到,然后输出到html文件,类似于:
<?php
//打开输出控制缓存
ob_start();
echo "<html><head><title>test页面</title></head><body>Hello world</body></html>";
//获取缓冲区的内容
$out = ob_get_contents();
//关闭输出缓存
ob_end_clean();
//打开test.html文件开启写入权限
$fp = fopen("test.html", "w");
if (!$fp) {
echo "Fail";die;
} else {
//写入文件
fwrite($fp, $out);
//关闭文件
fclose($fp);
echo "Success";
}
参考:php输出控制函数和输出函数生成静态页面
这种写法个人感觉会稍微乱一点,而且如果页面复杂的话,写出来的php+html代码会有些杂乱,所以博主选用的是第二种方法。
(2)提前写好模板页,然后进行替换
先准备好静态文件,然后把要替换的部分标出来,如{title},在php程序中用file_get_content获取html文件的内容,然后进行替换,替换之后保存为文件。
模板页:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{top_title}</title>
<link rel="stylesheet" href=" " rel="external nofollow" >
</head>
<body>
<div class="news-details-template">
<h1>{title}</h1>
<div class="author">{author}</div>
<div class="date">{show_time}</div>
<div class="line"></div>
<div>
{content}
</div>
</div>
</body>
</html>
我们先编写好模板页面,包括都有哪部分需要替换,基本的样式等,提前写好
php替换:
$path = \Yii::getAlias('@xxx').'/views/site/notice-detail.php';
$content = file_get_contents($path); //引入模板
//获取要替换的值进行字符串的替换
$content = str_replace('{top_title}',$title,$content);
$content = str_replace('{title}',$title,$content);
.......
$dir = $path ."/html/";
if (!file_exists($dir)) {
mkdir($dir);
}
$filename=$dir.'/'.$filename; //这里就不判断html是否存在了,因为写入会覆盖
$result = file_put_contents($filename,$content);//写入内容到对应静态文件中
大概就是先通过file_get_contents获取模板页的内容,然后通过str_replace进行标签的替换,替换完成之后,通过file_pu_contents写入到新文件即可。生成的html,我们可以生成多个html,让前端根据不同的页面去访问不同的html即可。
三、生成预览
生成html之后,一般来说是需要预览给工作人员看看的,毕竟人家也不懂技术,不知道到底生成的是啥
1、使用dialog打开窗口
静态页:
//这是我们要打开的窗口,先隐藏
<div id="dialog-form-record" style="display:none;">
<div id="Content_record">
</div>
</div>
JS定义底部按钮:
var arrButton = {
"Release": {
'text': '按钮名称',
'priority': 'secondary',
'class': 'btn btn-success',
'id':'',
'click':点击事件
},
"Cancel": {
'text': 'Cancel', //取消按钮
'priority': 'secondary',
"id":'xxx',
'click': function () {
dialogRecord.dialog( "close" );
}
}
};
//定义宽高
dialogRecord = $( "#dialog-form-record" ).dialog({
autoOpen: false,
height: 800,
width: 1400,
modal: true,
buttons:arrButton,
close: function() {
$( "#Content_record" ).html("");
dialogRecord.dialog( "close" );
}
});
JS打开窗口:
//定义标题和窗口大小
$( "#dialog-form-record" ).dialog( "option", "title", "Preview Html" );
$( "#dialog-form-record" ).dialog({
modal: true,
height: 800,
width: 1400
});
2、使用iframe引入刚才生成的静态文件
(1)js引入iframe
//加个时间戳,防止缓存
for (i in response.)
iframe += "<iframe class='news_iframe' id='iframe"+ i +"' src='"+ response.url.url +"/news/html/"+ response.zh[i] + "?timestamp= " + new Date().getTime() + "'></iframe>";
}
//把iframe写入到html
$( "#en_content" ).html(iframe);
3、注意:
(1)iframe的src里面不能有空格之类的东西
(2)iframe去除边框
(3)iframe加载速度慢,所以加个onload事件,当iframe加载完之后再显示
var iframe = document.getElementById("iframe" + count);
checkFinishedDownload(iframe);
function checkFinishedDownload(ifr) {
if (ifr.attachEvent) {
ifr.attachEvent("onload", function() {
//iframe加载完成后你需要进行的操作
});
} else {
ifr.onload = function() {
//iframe加载完成后你需要进行的操作
};
}
}
最终效果:
来源:https://blog.csdn.net/LJFPHP/article/details/93846093


猜你喜欢
- mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler、Charles的功能,只不过它通过控制台的形式操作。此外,m
- 首先,把项目上传到虚拟机中。scp -r C:\Users\Administrator\Desktop\fresh root@192.168
- 数据存储·在javascript中,数据存储的位置会对代码整体性能产生重大的影响。·数据存储共有4种方式:字面量、变量、数组、对象成员。·要
- 本文实例讲述了Python实现树的先序、中序、后序排序算法。分享给大家供大家参考,具体如下:#encoding=utf-8class Tre
- 锁是指在某组资源中,两个或两个以上的线程在执行过程中,在争夺某一资源时而造成互相等待的现象,若无外力的作用下,它们都将无法推进下去,死时就可
- 一个模块可以在逻辑上组织Python代码。将相关的代码到一个模块中,使代码更容易理解和使用。模块是可以绑定和借鉴任意命名属性的P
- 代码如下:---这是一个人事系统中的示例,要求记录一下员工的缺勤情况 ---1.要在表中记录一下缺勤计分,是对经常缺勤者的一种处
- --分页存储过程示例 Alter PROCEDURE [dbo].[JH_PageDemo] @pageSize int = 9000000
- Tip:本文仅供学习与交流,切勿用于非法用途!!!背景介绍有个同学问我:“XXX,有没有办法搜集一下淘宝的商品信息啊,我想要做个统计”。于是
- 学习复杂代码的最好方法是简化:(function(win, undefined) { var jQuery = f
- 目录一、进程的创建1、一些常用方法介绍二、进程池的使用三、多进程和多线程的优缺点对比一、进程的创建Python的multiprocessin
- 前言接着上一篇的故事工厂模式继续,手机要出厂,显然光一个手机肯定是不行的,还需要包装盒、充电器等等东西。我们按照上一篇提到的工厂模式,去建立
- Python批量替换文件内容,支持嵌套文件夹import ospath="./"for root,dirs,files
- 优化场景利用视图函数(views)查询数据之后可以通过上下文context、字典、列表等方式将数据传递给HTML模板,由template引擎
- /** * 得到XML文件属性的集合对象 * @param x
- 网上关于这方面的文章有很多,重复的东西本文不再赘述,仅提供思路,并解释一些其他文章讲述模糊的地方。 1、使用meta标签,这也是普
- 第一次打包vue的项目部署到服务器下时,发现初次加载特别的缓慢,将近20s页面才加载出来,完全没有开发环境上的那么流畅。主要原因是页面在打包
- 对于很多开发者来说,Navicat这个软件并不陌生, 相信这个彩虹色图标的软件,有效的帮助了你的开发工作。从前上学的时候,我都是用的都是从网
- 本文实例为大家分享了wxPython电子表格功能的具体代码,供大家参考,具体内容如下#!/usr/bin/env python#encodi
- ASP 本身不支持动态包含文件,现在的动态包含是通过 FSO 把被包含的文件合并到主文件里再运行。以下也有把形如 <!--#