问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

大型php网站全站静态化怎么实现? 如果有上万个页面每更改一小篇文章都要全部重新生成吗?

发布网友 发布时间:2022-04-05 23:19

我来回答

3个回答

懂视网 时间:2022-04-06 03:41

php实现静态化的方法:1、改写访问地址,能够通过URL的PATHINFO模式来改动它;2、站点能够在用户访问站点之前就通过一定的程序来进行静态化。

php实现静态化的方法:

PHP站点开发过程中,因为搜索引擎对PHP页面搜鹿和html页面的收录有一定的区别,为了站点的推广或者SEO的须要,要对站点进行一定的静态化。静态化并非页面中没有动画等元素,而是指网页的html代码都在页面中,不须要再去执行PHP脚本等server端的语言,我们能够直接訪问到的网页。这就是静态网页。

有一种方式是改写訪问地址,能够通过URL的PATHINFO模式来改动它。让它看上去更像一个静态页面。从而有更大的几率被搜索引擎抓取和收录,仅是对搜索引擎比較友好,伪静态化。

第二种就是站点能够在用户訪问站点之前就通过一定的程序来进行静态化。生成静态页面。当用户去訪问该页面的时候。因为訪问的是静态页面,因此,訪问速度会比訪问动态页面的速度快了非常多倍,前台的表现是页面载入速度变快,在后台的表现是降低了数据库的连接。降低了数据库的压力,唯一的缺点就是相对占的硬盘多一些,硬盘相对便宜的多。

纯静态化,就是生成HTML文件的方式,我们须要开启PHP自带的缓存机制,即ob_start来开启缓存。而且在ob_start之前不能有不论什么输出,否则运行失败,然后我们用ob_get_contents函数来获取缓存中的内容,该函数会返回一个字符串。第三个函数就是ob_end_clean,它用来清空缓存中的内容而且关闭,成功返回True,失败返回False。

<?php
//开启缓存
ob_start();
//第一步连接数据库
$conn = mysqli_connect("localhost","root","","bbs");
//第二步设置对应的字符编码
$setting = 'set names utf8';
mysqli_query($conn,$setting);
//第三步进行查询
$sql = 'SELECT * FROM user';
$result = mysqli_query($conn,$sql);
//第四步把查询结果转化为一个数组
$rows = mysqli_num_rows($result);
$sqldata = array();
for($i = 0;$i <$rows;$i ++){
 $sqldata[] = mysqli_fetch_assoc($result);
}
//然后打印该信息
var_dump($sqldata);
//得到生成的html文件,下次訪问就无需訪问数据库了
$msg = ob_get_contents();
ob_end_clean();
//把输出内容放入一个html文件里
$f = fopen("static.html","w");
fwrite($f,$msg);
echo "静态化成功";

目录下生成一个html文件

<pre class='xdebug-var-dump' dir='ltr'>
<b>array</b> <i>(size=6)</i>
 0 <font color='#888a85'>=></font> 
 <b>array</b> <i>(size=4)</i>
 'id' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'1'</font> <i>(length=1)</i>
 'level' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'0'</font> <i>(length=1)</i>
 'name' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'辛星'</font> <i>(length=6)</i>
 'pwd' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'bd04fcc97578ce33ca5fb331f42bc375'</font> <i>(length=32)</i>
 1 <font color='#888a85'>=></font> 
 <b>array</b> <i>(size=4)</i>
 'id' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'2'</font> <i>(length=1)</i>
 'level' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'1'</font> <i>(length=1)</i>
 'name' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'小倩'</font> <i>(length=6)</i>
 'pwd' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'61cb72858be523b9926ecc3d7da5d0c6'</font> <i>(length=32)</i>
 2 <font color='#888a85'>=></font> 
 <b>array</b> <i>(size=4)</i>
 'id' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'3'</font> <i>(length=1)</i>
 'level' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'1'</font> <i>(length=1)</i>
 'name' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'小楠'</font> <i>(length=6)</i>
 'pwd' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'a3d2de7675556553a5f08e4c88d2c228'</font> <i>(length=32)</i>
 3 <font color='#888a85'>=></font> 
 <b>array</b> <i>(size=4)</i>
 'id' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'4'</font> <i>(length=1)</i>
 'level' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'1'</font> <i>(length=1)</i>
 'name' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'刘强'</font> <i>(length=6)</i>
 'pwd' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'fcdb06a72af0516502e5fdccc9181ee0'</font> <i>(length=32)</i>
 4 <font color='#888a85'>=></font> 
 <b>array</b> <i>(size=4)</i>
 'id' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'5'</font> <i>(length=1)</i>
 'level' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'1'</font> <i>(length=1)</i>
 'name' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'星哥'</font> <i>(length=6)</i>
 'pwd' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'866a6cafcf74ab3c2612a85626f1c706'</font> <i>(length=32)</i>
 5 <font color='#888a85'>=></font> 
 <b>array</b> <i>(size=4)</i>
 'id' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'6'</font> <i>(length=1)</i>
 'level' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'1'</font> <i>(length=1)</i>
 'name' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'辛勇'</font> <i>(length=6)</i>
 'pwd' <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'e93beb7663f3320eaa0157730d02dd0c'</font> <i>(length=32)</i>
</pre>

相关学习推荐:php编程(视频)

热心网友 时间:2022-04-06 00:49

用libTemplate实现静态网页的生成

作者:iwind

原来在dev-club发表的一篇文章,将怎么用模板处理程序PHPlib 中的template.inc实现静态网页的生成,呵呵,居然被列入精华,并被多个网站转载,想来这是荣幸。其实网上这方面的东西很多了,我上此发布的所谓IAMS( iwind 文章管理系统),里面也有,有心人可以看一下。下面我只是简要在总结一次。

现在一般说生成静态网页的方法有三种,一个是配置服务器,大家可以到http://www.devarticles.com/c/b/PHP/ 去找找看,对于这个很多地方都有的。另外一个是用ob_函数控制输出。方法如下:先用ob_start();打开输出缓冲器,然后是对数据的分析,操作等等,跟着用ob_get_contents();获取缓冲区的内容,然后再写入文件。根据这个步骤,可以写出以下程序:
<?php
ob_start();
//主体部分,数据操作,处理,输出等等。。。
require”global.php”;
mysql_connect(“localhost”,”root”,””);
…..
//获取缓冲区内容
$contents=ob_get_contents();
//如果不想输出任何东西,可以加上这句
ob_end_clean();
//写入目的文件
$fp=@fopen($targetFile,”w+”) or die(“打开文件时出错”);
fwrite($fp,$contents);
?>

这样就把这个动态页面的内容写入了静态页面,$targetFile.像有的网站首页内容很多,要调用n多个查询语句时,不妨定时生成静态网页,既大幅提高了访问速度,也减轻了服务器负担。

你可以看出来,我用ob_只是处理单个页面,对于批量写入或更新多个页面,这个方法就不行了。这就是我要讲的第三种方法,用模板。模板是个好东东,现在大家都或多或少在用它,建议还不会简单模板处理的网友,花点时间去学它,一般的模板处理程序都很简单的。用模板实现静态网页的生成是非常简单的,方法就是获取分析结果,把分析结果写入文件。下面就以PHPlib中的template.inc来谈谈如果用模板生成静态网页。

一, 修改template.inc
加入以下的几个函数:
//将分析结果保存到文件中去
function savetofile ($dir,$varname){
$data=$this-> finish($this-> get_var($varname));
$fp=fopen($dir, "w+ ");
fwrite($fp,$data);
}
//清除已赋值数组
function renew(){
$this-> varkeys=array();
$this-> varvals=array();
$this-> file=array();
}

第一个函数是结果保存到静态文件中,第二个是把所有的模板分析变量都置为空,以免批量处理时相互影响。

二,实现静态网页生成。
<?php
$itpl-> set_file(“main”,”mian.tpl”);
//分析模板变量
…..
//分析main?mains
$tpl-> parse( "mains ", "main ");
//把分析结果mains存入main.html
$tpl-> savetofile( "main.html ", "mains ");
//置空
$tpl-> renew();//至关重要
?>

呵呵,是不是很简单,main.html就是我们要的内容。下面是一个结合数据库的例子,并用函数封装了起来。
<?php
//$aid是数据库中的文章id,$table是表名称,$template是模板地址,$tpl是template.inc的一个实例
//每一个aid对应一个静态网页地址,都存在一个数据表中
//表的结构类似于 aid target title
// 1 a1.html ….
// 2 a2.html ….
// 3 a3.html ….
function staticInfo($aid){
global $table,$template,$tpl;
//查询数据库
$res=mysql_query(“select * from $table where aid=’$aid’”);
//取出数据
$array=mysql_fetch_array($res);
//读静态网页地址,标题。
$target=$array[“target”];
$title=$array[“title”];
//分析模板
$tpl-> set_file(“main”,$template);
//把模板中的{title}变量换成$title
$itpl-> set_var(“title”,$title”);
//分析整个模板
$itpl-> set_var(“mains”,”main”);
//把mains写入文件
$tpl-> savetofile($target, "mains ");
//置空
$tpl-> renew();
}
?>

这样我们就可以用函数staticInfo()把我们想要处理的任一篇文章都生成静态网页。表$target里也可以包含文章内容,作者,来源等等,方法是一样的。

三,更新静态网页
一篇文章加入数据库后,由于一些原因我们总要修改一些文章。这时候,只要把相应的静态网页重新生成一次即可。这是非常方便的,因为表中已经有了静态网页的目标地址target字段。

可以看出关键所在,一篇文章生成静态网页的关键所在就是$template(模板地址),$target(目标地址)。前者,我们可以先确定,后者可以由你随心所欲的为每篇文章设置一个地址。常用的有1,时间戳 2,时分秒 3,根据文章id。因为这些重复的机会会非常小的。

四,批量生成静态网页.
有了单个文章生成的静态网页的函数了,那么批量生成是非常简单的。就是获取所有的文章aid,然后套入函数即可。
<?php
//引用模板类
require”template.inc”;
//引入函数
require”functions.php”;
//一些变量的定义
$table=”art”;
$template=”template/info.tpl”;
$tpl=new Template(“.”);
//连接mysql,选择数据库
mysql_connect(“localhost”,”root’,””);
mysql_select_db(“article”);
//发送查询语句
$res=mysql_query(“select aid from $table”);
while($r=mysql_fetch_array($res)){
$aid=$r[“aid”];
//生成静态网页
staticInfo($aid);
}
//结束
echo”所有静态网页更新/生成成功”;
?>

上面就是完整的例子。我们做cms的流程可以如下:
1,记者发稿(把稿件内容放入数据库)
2,编辑审查(如果他认为可以发布,那么就可以把这些内容生成静态网页)
3,退回稿件(把生成的静态网页删除,把数据库中的内容删除)

然后,我们访问到的网站内容就都是静态的了。一个问题就是,这种方法会不会占用很多空间内?http://www.csdn.com.cn 有上千篇文章了,只占用了20M空间。反过来说,如果你有10000篇文章的话,你不会吝啬到只买200M的空间吧?

或许你对生成静态的文章列表感到困惑,其实方法是一样的,就是 计算页码? 分析每个页码的内容 ? 写入文件。 分析每个页码的内容,当然是写个函数咯,如果你一页一页的生成,恐怕被人嘲笑 ^_^。

静态网页不仅仅是可以减轻服务器负担,提高访问速度,也可以方便地做镜像网站,方便地备份,减少被攻击损失程度,加快还原速度。当然静态网页也会给大家带来诸多不便的地方,你需要在动态和静态之间做出平衡,
也可以在静态网页中加入js调用的php代码,来达到计数,即时更新等目的。(完)

热心网友 时间:2022-04-06 02:07

如果是我,网站太大了,如果网站不是单一入口的架构就要通过服务器等分析用户请求url。判断是否生成过html。没有生成过通过一个机制生成,之后301到html页。后台修改文件那只更新此文件对应的html。如果更新的是网页公共部分,那只好全部生成一下了。如果公共部分好标识的话可以在用户请求时生成,好像也挺复杂。
网站太胖就是不好处理。可能我更倾向于用伪静态。
全部生成太费时,基本修改哪个文件更新哪个,用户请求哪个生成哪个吧。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 php网站如何静态化? 怎么实现网页静态化? php系统如何实现动态页面静态化 PHP 实现页面静态化的几种方法 php 中 单引号 输出字符串用 单、双引号区别是什么? PHP中单引号和双引号的区别 简述用双引号和单引号定义字符串的区别(PHP编程)? PHP语法中单引号和双引号的区别 php单引号和双引号的区别 php中对单引号和双引号的区别 在PHP中,单引号字符串同双引号字符串有什么区别? PHP中对变量使用单引号和双引号的区别 php字符串单引号和双引号的区别 php单引号和双引号的区别与用法 php中,单引号和双引号的区别 PHP中单引号与双引号的区别分析 浅谈PHP中单引号和双引号到底有啥区别呢? PHP单引号和双引号的区别 – 不知不问 php中单引号和双引号有什么区别? php 双引号和 单引号 有什么异同 如何实现网页静态化 PHP网站如何实现网页伪静态或静态? 大家好,请问一下yii2.0怎么实现页面静态化? php的url静态化 如何静态化URL地址 PHP中 php ob首页静态化 php全站静态、伪静态 如何让PHPWIND页面静态化 PHP缓存技术、静态化设计的原理是什么 php站怎么把全站URL静态化 python语言中的列表的建立 Python如何用列表向类传参?急!在线等! 用python语言如何给列表动态的赋值? PHP网站怎么修改页面? php网站怎么改 PHP网页修改 我想获取一个PHP网页的源码,并修改其中部分内容,需要用到什么软件 php格式的网页怎样修改 怎么修改php网站后台的首页页面呢 PHP的网站主页如何修改?