文档章节

PHP页面纯静态化与伪静态化

Corwien
 Corwien
发布于 2016/04/15 10:22
字数 1575
阅读 138
收藏 2
点赞 1
评论 0

       在很多地方都看到有PHP整站静态化的东东,怪唬人的。。其实,你会静态化一个页面,那么别说整站了,想静态化多少都可以。所以关键是,首先要知道怎么静态化一个页面,了解静态化的原理是关键,这里就说下我个人的理解了。


区别:

 纯静态页面:是指网页文件在服务器的硬盘上以纯html代码文件存放的,默认文件名通常是htm、html、shtml、shtm等,一般情况下是由一个内容管理系统来生成的网站。

伪静态网站:是指以html或者htm为扩展名的url,在客户端看起来被认为是静态网站,实际上在服务器端采用URL重写技术指向动态程序路径。另外还有的是采用Ajax等JS技术调用服务器端动态内容来显示,虽然网页是静态的,内容却是动态读取的。

优缺点:

伪静态其实是动态的或者半动态的网站,动态和静态各有优缺,一般来说静态的性能优势明显,访问量大的网站无不是采用静态化的网站。随着网站的复杂程度增高和用户对交互的需求,一些动态的部分不可以静态化,所以,目前大多数网站或多或少都会有动态的部分。


一、纯静态页面:

首先,需要知道几个函数。

ob_start();

ob_end_clean();

ob_get_contents();

file_put_contents();//这个可以用fopen,fwrite代替

file_exists();等函数。

不知道这些函数的就自己去翻手册,这里就不多讲解了。

OK。下面就是生成的过程。。

假设你需要把当前的页面,生成成a.html。那么

------------------------------------------------------

//现在这里留个位置,,,,,,,,,,,,,,,,,,,,记住些逗号~~~

//首先需要使用

ob_start();//这个的作用就是先不让当前动态页面的内容发送到客户端。

//既然不让发送了,那么内容怎么获取,如下。

$content=ob_get_contents();

//$content就是你当前页面的所有内容。。暂时被保存在服务器内存中。

//然后获取内容之后,就可以把内容释放出来了

ob_end_clean();

//好,把前面的内容直接写入文件就是了。这也是生成静态页面的关键

file_put_contents("a.html",$content);

//以前已经OK了。

//看看你的目录里是不是已经有a.html了。

//记住这些句号。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

------------------------------------------

生成静态页之后,很多地方的方法就是直接重定向到新的页面。a.html-----header("Location:a.html")。语句写在很多句号那里

其实我个人认为不必要了。因为当前页面已经动态生成,干嘛在重定向一次呢。。

好了,问题来了。那么生成的静态页面如何使用呢。

嗯,回头去看很多逗号的地方。

我们在当前这个页面的开头地方

我们开始就进行一个判断。判断a.html是否存在。

如果存在就重定向到a.html就行了。代码如下

--------------------------------------------

if(file_exists("a.html"))

{

   $time = time();

  

   //这个就是判断下静态页面生成时间,我们可能需要定时更新静态页面--毕竟动态页面是要变化的么。

   if($time - filemtime("a.html") < 30*60)

   {

   header("Location:a.html");

   }

}

------------------------------------------------------

好了。以上基本上就可以完成的生成静态页面了。

当然,如果是要整站静态页面,以及静态文件规则;就得自己去设计了---不可能所有的静态页面文件都叫a.html的么。

我们可以根据当前动态页面传递的值来进行命名等。~


二、伪静态页面

 伪静态实际上就是把 index.php?act=about&cid=1 将这种形式的动态路径用 about-1.html 这种形式输出,也就是说浏览器每次访问about-1.html地址能打开相应的index.php?act=about&cid=1动态网址。

伪静态的实现本质上是配置服务器进行路径转换,根据不同的服务器环境,配置方法也不太一样,PHP+iis6的话就要配置httpd.ini文件,php+iis7就要配置web.config,PHP+apache就要配置.htaccess文件(或者httpd.conf)


.htaccess(或者httpd.conf)文件的规则示例:
RewriteEngine on 
RewriteRule ^/?(index|guestbook|online)\.html$ index\.php [L]
RewriteRule ^/?(eindex)\.html$ index\.php?act=$1 [L]
RewriteRule ^/?(index|guestbook|online)-([0-9]+).html$ index\.php\?p=$2 [L]
RewriteRule ^/?([a-z0-9]+)_([0-9]+).html$ index\.php\?act=$1&id=$2 [L]
RewriteRule ^/?([a-z0-9]+)-([0-9]+).html$ index\.php\?act=$1&cid=$2 [L]
RewriteRule ^/?([a-z0-9]+)-([0-9]+)-([0-9]+).html$ index\.php\?act=$1&cid=$2&p=$3 [L]

httpd.ini示例:
[ISAPI_Rewrite]
RepeatLimit 32
# Block external access to the httpd.ini and httpd.parse.errors files
RewriteRule /httpd(?:\.ini|\.parse\.errors).* / [F,I,O]
# Block external access to the Helper ISAPI Extension
RewriteRule .*\.isrwhlp / [F,I,O]
RewriteRule ^/(index|guestbook|online)\.html$ /$1\.php 
RewriteRule ^/(eindex).html$ /index\.php\?act=$1 
RewriteRule ^/(index|guestbook|online)-([0-9]+).html$ /$1\.php\?p=$2 
RewriteRule ^/([a-z0-9]+)_([0-9]+).html$ /index\.php\?act=$1&id=$2 
RewriteRule ^/([a-z0-9]+)-([0-9]+).html$ /index\.php\?act=$1&cid=$2 
RewriteRule ^/([a-z0-9]+)-([0-9]+)-([0-9]+).html$ /index\.php\?act=$1&cid=$2&p=$3


如果在工作项没有权限修改Apache的配置文件,我们可以在本地项目中建一个.htaccess文件,同样可以达到目的:

首先要确定你的Apache启用了mod_rewrite模块,并且将http.conf文件中网站所在目录的AllowOverride None 改为 AllowOverride all

然后在程序目录下创建一个名为 .htaccess的文件

将以下内容写入这个文件里:

RewriteEngine On

RewriteRule ^index/([0-9]+)\.html$ index.php?page=$1


真静态和伪静态的选择

<1> 真静态访问效率高,利于seo.可以减少对数据库的操作。但是会占用大量的磁盘.

<2> 伪静态

①、可以方便的实现对搜索引擎的优化

②、占空间比较小。

③、通过生成不同view-2.hmtl 可以实现内容的变化. 

④、有效的防止了注入攻击

 

小结如果一个网页会被频繁的访问(比如百万级别),通过该网页每次都会去操作数据库,可以考虑使用真静态(建议有针对性的使用),如果一个网页为了实现对搜索引擎的优化,提供网站的安全性,使用伪静态.

个人推荐使用伪静态配合缓存技术来为提供大型网站提速




© 著作权归作者所有

共有 人打赏支持
Corwien
粉丝 26
博文 144
码字总数 115164
作品 0
广州
程序员
PHP生成静态页面的方法

在PHP网站开发中为了网站推广和SEO等需要,需要对网站进行全站或局部静态化处理,PHP生成静态HTML页面有多种方法,比如利用PHP模板、缓存等实现页面静态化,今天就以PHP实例教程形式讨论PHP...

v_desigen ⋅ 2012/04/25 ⋅ 0

php页面静态化

网站一直在加载,很慢,处理方式多种; 0.页面静态化; 1.优化数据库; 2.负载均衡; 3.使用缓存技术 关于页面静态化 使用函数如 fileputcontents($filename,$string); php的输出缓冲区 开启...

just_wkj ⋅ 2016/01/02 ⋅ 0

ECSHOP系统纯静态网页的生成

ecshop是一个很不错的网店系统,现在很多公司都在用它,它本身优化也很好,不过因为是网店,很多东西都是动态的,所以,对优化来说,不怎么好,不过庆幸的是它可以伪静态。并且有两种重写方法...

MR梁 ⋅ 2013/06/10 ⋅ 0

小蚂蚁学习页面静态化(1)——静态化的原理

关于页面php文件执行阶段 语法分析——》编译——》运行 如何优化页面的响应时间 动态页面静态化 优化数据库 使用负载均衡 使用缓存 页面静态化能够解决的问题 1.减少服务器脚本的计算时间 ...

嗜学如命的小蚂蚁 ⋅ 2015/10/09 ⋅ 2

nginx的pathinfo配置

前言: 首先,什么是pathinfo模式呢? pathinfo是伪静态的一种,我们先解释一下伪静态的概念,伪静态页面是静态URL与动态URL互通的一个桥梁,它是指动态网址通过URL重写的手段去掉其动态参数...

dingdayu ⋅ 2016/04/21 ⋅ 0

构架高性能WEB网站的几点知识

前言: 对于构架高性能的web网站大家都很感兴趣,本文从几点粗谈高性能web网站需要考虑的问题。 HTML静态化 什么是html静态化? 说得简单点,就是把所有不是.htm或者.html的页面改为.htm或者...

吞吞吐吐的 ⋅ 2017/10/11 ⋅ 0

关于apache 设置 301 跳转的问题,进来看看!!

是这样的,以前网站的URL如下: http://www.168btjob.com/jobs/jobs-show.php?id=1640 其伪静态后的地址如下: http://www.168btjob.com/jobs/show-jobs-1640.html 伪静态规则: RewriteRul...

归海一刀 ⋅ 2013/10/07 ⋅ 7

php网站静态化

一、静态化 实现静态化的两种方法: 1.利用ob缓存技术进行静态化 2.利用模板替换技术实现静态化 二.伪静态 优点:1.速度快 2.利于seo 3.安全性高 缺点:占磁盘空间,如果过大,对磁盘响应速度...

yang名扬 ⋅ 2014/07/15 ⋅ 0

php 静态页面化

目前网络上好多网站的新闻发布系统都采用了动态服务器技术生成静态HTML的做法,这样做的好处是:一是能减轻其服务器的负担,二是因为生成了HTML静 态页面,所以其网站被搜索引擎搜索到的机率...

eatnothing ⋅ 2015/06/08 ⋅ 0

php伪静态之APACHE配置篇

在apache中mod_rewrite模块,它可以实现伪静态页面。 分享下apache中配置php伪静态的方法。 1.检测Apache是否支持modrewrite 通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“L...

mysoftsky ⋅ 2014/06/06 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 数据库设计总结

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节...

OSC_cnhwTY ⋅ 54分钟前 ⋅ 0

多线程(四)

线程池和Exector框架 什么是线程池? 降低资源的消耗 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池没有或者减少T1和T3 提高线程的可管理性。 线程池要做些什...

这很耳东先生 ⋅ 今天 ⋅ 0

使用SpringMVC的@Validated注解验证

1、SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 [java] view plain copy edit.userna...

瑟青豆 ⋅ 今天 ⋅ 0

19.压缩工具gzip bzip2 xz

6月22日任务 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具 6.1 压缩打包介绍: linux中常见的一些压缩文件 .zip .gz .bz2 .xz .tar .gz .tar .bz2 .tar.xz 建立一些文...

王鑫linux ⋅ 今天 ⋅ 0

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 今天 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 今天 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 今天 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 今天 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 今天 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部