在不少地方都看到有PHP整站静态化的东东,怪唬人的。。其实,你会静态化一个页面,那么别说整站了,想静态化多少均可以。因此关键是,首先要知道怎么静态化一个页面,了解静态化的原理是关键,这里就说下我我的的理解了。php
区别:html
纯静态页面:是指网页文件在服务器的硬盘上以纯html代码文件存放的,默认文件名一般是htm、html、shtml、shtm等,通常状况下是由一个内容管理系统来生成的网站。web
伪静态网站:是指以html或者htm为扩展名的url,在客户端看起来被认为是静态网站,实际上在服务器端采用URL重写技术指向动态程序路径。另外还有的是采用Ajax等JS技术调用服务器端动态内容来显示,虽然网页是静态的,内容倒是动态读取的。数据库
优缺点:apache
伪静态实际上是动态的或者半动态的网站,动态和静态各有优缺,通常来讲静态的性能优点明显,访问量大的网站无不是采用静态化的网站。随着网站的复杂程度增高和用户对交互的需求,一些动态的部分不能够静态化,因此,目前大多数网站或多或少都会有动态的部分。浏览器
首先,须要知道几个函数。缓存
ob_start();安全
ob_end_clean();服务器
ob_get_contents();ide
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 能够实现内容的变化.
④、有效的防止了注入攻击
小结: 若是一个网页会被频繁的访问(好比百万级别),经过该网页每次都会去操做数据库,能够考虑使用真静态(建议有针对性的使用),若是一个网页为了实现对搜索引擎的优化,提供网站的安全性,使用伪静态.
注: 我的推荐使用伪静态配合缓存技术来为提供大型网站提速.