精华内容
下载资源
问答
  • 2016-10-21 17:08:32

    PHP静态化技术分为两种:真静态技术 和伪静态技术。

    什么是真静态技术?我们把.html文件称为静态文件。所以,真静态技术就是生成静态文件的技术。
    在讨论PHP生成静态文件的技术之前,需要弄明白一点。这个技术针对的需求和使用的地方在哪里?
    笔者在这个地方很是苦恼了一番。我们知道一个网站,通常来讲会有前台和后台之分,也就是给client看的部分和管理给client看的部分。
    给client 看的部分可以是一个静态的.html文件也可以是一个动态的.php文件。如果是一个.php文件,需要PHP模块去解析执行,如果涉及到
    的数据需要从数据库获取的话,还要访问数据库。这在高并发以及大流量的网站,会对服务器的性能和数据库形成很大的压力。因此使用静态文件的话,
    不仅可以提高访问的速度,还能降低成本。


    (当我们把生成静态文件的代码放置到后台中,前台只需要放置对应的html文件即可。这样做,天然的实现了用户访问网站时,只能看到html文件的功能)


    事实上如何生成一个html文件的方式有很多,这里只说明比较熟悉的两种方式。一种是基于ob output control输出缓存控制和PHP文件系统函数。另一种则是模板替换技术。


    1.基于ob的生成静态html文件的方法。


    <? 
    ob_start(); 
    echo "<html>". 
    "<head>". 
    "<title>PHP网站静态化教程</title>". 
    "</head>". 
    "<body>欢迎访问脚本之家,本文主要介绍PHP网站页面静态化的方法</body>". 
    "</html>"; 
    $out1 = ob_get_contents(); 
    ob_end_clean(); 
    $fp = fopen("leapsoulcn.html","w"); 
    if(!$fp) 

    echo "System Error"; 
    exit(); 

    else

    fwrite($fp,$out1); 
    fclose($fp); 
    echo "Success"; 

    ?>
    //这段代码展示了ob函数的基本使用方式。在实际的应用中会比这个复杂的多。


    2.模板替换技术。首先编写一个模板,这里模板为显示一篇文章的模板。
    Page.tpl
    <html>
    <head>
    <meta  charset="utf-8">
    <title>%title%</title>
    </head>
    <body>
      <h3>%title%</h3>
      <hr>
      <div class="content">
           %content%
      </div>
    </body>
    </html>


    action.php  模板替换实现
    <?php
           //从数据库获取数据的代码省略
          $data = array("id"=>"1",'titile'=>"page_title","content"=>"page_content");
          $html_filename = "page_".$data['id'].".html" ;
          $html_fp = fopen($html_filename,'w'); //打开该html文件,以便于后面写入数据
          $tpl = fopen("Page.tpl",'r'); //读取模板文件
          while(!feof($fp)){
                 $row = fgets($fp);
                 $row = str_replace("%title%",$data['title']);   //把模板文件中的占位符有实际数据替换掉
                 $row = str_replace("%content",$data['content']);  
                 fwrite($html_fp,$row);
          }
          fclose($html_fp);
          fclose($fp);
          //至此,html文件已经生成。可以在其它页面根据既定的规律来连接到该文件。 实际的模板替换可能比例子复杂的多。


    PHP模板实现静态化非常方便,比如安装和使用PHP Smarty实现网站静态化。
    在使用Smarty的情况下,也可以实现页面静态化。下面先简单说一下使用Smarty时通常动态读取的做法。 
    一般分这几步:
    1、通过URL传递一个参数(ID);
    2、然后根据此ID查询数据库;
    3、取得数据后根据需要修改显示内容;
    4、assign需要显示的数据;
    5、display模板文件。
    Smarty静态化过程只需要在上述过程中添加两个步骤。
    第一:在1之前使用 ob_start() 打开缓冲区。
    第二:在5之后使用 ob_get_contents() 获取内存未输出内容,然后使用fwrite()将内容写入目标html文件


    最后,讨论下如何实现用户在第一次访问时生成静态文件以及设置文件过期时间的思路。
    要实现这点,首先访问的文件就不能是html 文件,而只能是php文件。在其中添加判断。当前请求的
    html 文件是否存在以及文件的生成时间和当前系统时间对比,是否有超过规定的过期时间如30s. 如果超过
    就执行动态代码并重新生成该静态文件,否则读取存在的静态文件并返回即可。

    更多相关内容
  • php 静态化实现代码

    2020-10-30 01:15:04
    Replace函数用于将从模版文件中读取的内容中的关键字替换成变量中的内容
  • 用smarty实现纯静态化的文件发布有两种方法,也就是纯HTML文件生成的方法,包括以下两种方法,需要的朋友可以参考下
  • php 静态变量的初始

    2020-12-18 07:24:26
    } } 但是php中并没有一个类似java中的静态构造器/静态块的东西,就没有合适的时机对其进行初始了。 对于共有的成员还有办法解决,例如: class A { static public $child; } A::$child = new B()
  • 为什么要页面静态化? 1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快;如果页面中一些内容不经常改动,动态页面静态...
  • 本文实例讲述了PHP页面静态化——纯静态与伪静态用法。分享给大家供大家参考,具体如下: 为什么要静态化页面?  当用户访问一个不经常更新的Web页面,PHP接到指示对php脚本文件进行解析,从数据库查询到该页面所...
  • 主要介绍了PHP实现HTML页面静态化的方法,分享了静态处理的方法,静态处理后的优势,并提供了多种静态的方法,感兴趣的小伙伴们可以参考一下
  • php静态化的类,可以实现静态页面,可是实现对数据库更新,不过要根据你的具体需要做一些修改,如表和字段名及文件目录等。
  • NULL 博文链接:https://onestopweb.iteye.com/blog/2409199
  • 主要介绍了PHP 实现页面静态化的几种方法,需要的朋友可以参考下
  • 主要介绍了PHP单例模式数据库连接类与页面静态化实现方法,涉及php面向对象单例模式数据库连接类的定义与使用方法,以及缓存实现页面静态化相关操作技巧,需要的朋友可以参考下
  • 目前此分页支持静态化地址分页和无链接地址时的ajax分页(但是js得自己写): 支持的静态地址如下:www.example.com/xxx-xxx-p1-xxxx-xx.html 其他形式静态化需根据自己情况进行改写 支持ajax方式分页时,$link参数...
  • 先来看看php在服务器的执行过程:当用户请求服务器php文件的时候,服务器将对php文件进行语法分析,其次是解析,最后才运行。... 可见,如果用户直接访问静态页面的时候,服务器的响应时间一般会比访问动态文件的

           先来看看php在服务器的执行过程:当用户请求服务器php文件的时候,服务器将对php文件进行语法分析,其次是解析,最后才运行。当php文件有内容输出时,该内容会先经过服务器的php的缓冲区(buffer),然后再通过TCP传递到客户端。(buffer其实就是缓冲区,一个内存地址空间,主要用于存储数据区域)

           可见,如果用户直接访问静态页面的时候,服务器的响应时间一般会比访问动态文件的时间短。如果我们能把用户将要访问的动态文件先转化为静态文件即可加快用户访问页面的速度(获取网页的速度)。当然我们要注意静态化的应用场景,页面的静态化主要应用于那些页面内容不经常改动的页面。

           关于静态化,PHP的静态化分为:纯静态和伪静态。其中纯静态又分为:局部纯静态和全部纯静态。这里将的是全部纯静态。

           这里先介绍几个关于PHP缓冲区的相关函数:

    ob_start     打开输出控制缓冲(要求php开启缓存,在php配置文件php.ini文件中可以设置 output_buffering = on)

    ob_get_contents     返回输出缓冲区内容

    ob_clean     清空(擦掉)输出缓冲区

    ob_get_clean     得到当前缓冲区的内容并删除当前输出缓冲区

           php生成文件的函数 file_put_contents('文件路径','文件内容')。(当然php中还有其他写文件的方法,如fwrite)

    下面有个demo01的案例,目录结构为:


           我们先来创建一个 mooc_cms 数据库,创建表 news,如下:


           并且插入多条数据,如下:


           创建一个数据库的操作类 db.php

    <?php 
    	/**
    	 * 数据库连接封装
    	 */
    	class Db {
    		//存储类的实例的静态成员变量
    		private static $_instance;
    		//数据库链接静态变量
    		private static $_connectSource;
    		//连接数据库配置
    		private $_dbConfig = array(
    				'host' => '127.0.0.1',
    				'user' => 'root',
    				'password' => '',
    				'database' => 'mooc_cms'
    			);
    
    		private function __construct() {
    
    		}
    
    		/**
    		 * 实例化
    		 */
    		public static function getInstance() {
    			//判断是否被实例化
    			if(!(self::$_instance instanceof self)) {
    				self::$_instance = new self();
    			}
    			return self::$_instance;
    		}
    
    		/**
    		 * 数据库连接
    		 */
    		public function connect() {
    			if(!self::$_connectSource) {
    				//数据库连接
    				// @ 符号可以取消警告提示
    				self::$_connectSource = @mysql_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);
    
    				if(!self::$_connectSource) {
    					//抛出异常处理
    					throw new Exception('mysql connect error ');
    				}
    				//选择一款数据库
    				mysql_select_db($this->_dbConfig['database'], self::$_connectSource);
    				//设置字符编码
    				mysql_query("set names UTF8", self::$_connectSource);
    			}
    
    			//返回资源链接
    			return self::$_connectSource;
    		}
    	}
    ?>

           index.php (根据静态文件失效的时间,判断是否重新生成静态文件 index.shtml)

    <?php 
    	//1、连接数据库,然后从数据库里面获取数据
    	//2、把获取到的数据填充到模板文件里面
    	//3、需要把动态的页面转化为静态页面,生成纯静态化文件
    	if(is_file('index.shtml') && (time() - filemtime('index.shtml')) < 300) { //设置缓存失效时间
    		require_once('index.shtml');
    	} else {
    		require_once('db.php');
    
    		$connect = Db::getInstance()->connect();
    		$sql = "SELECT * FROM news WHERE `category_id` = 1 AND `status` = 1 ORDER BY id DESC LIMIT 5";
    		$result = mysql_query($sql, $connect);
    		$news = array();
    		while($row = mysql_fetch_array($result)) {
    			$news[] = $row;
    		}
    		//print_r($news);
    		
    		ob_start(); //开启缓存区
    
    		//引入模板文件
    		require_once('templates/singwa.php'); //动态文件    singwa.php界面同样进过缓冲区
    		file_put_contents('index.shtml', ob_get_contents());
    		/*if(file_put_contents('index.shtml', ob_get_clean())) {
    			echo 'success';
    		} else {
    			echo 'error';
    		}*/
    	}
    	
    ?>
           singwa.php(使用bootstrap框架做界面)

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>新闻中心</title>
    	<link rel="stylesheet" href="public/css/bootstrap.min.css" type="text/css">
    </head>
    <body>
    	<div class="container">
    		<h3>新闻列表</h3>
    		<ul class="list-group">
    			<?php foreach ($news as $key => $value) { ?>
    			<li class="list-group-item"><a href="#"><?php echo $value['title'];?></a></li>
    			<?php } ?>
    		</ul>
    	</div>
    </body>
    </html>

           当我们第一次访问 index.php时,服务器将为我们生成一个静态文件index.shtml。


           出现 index.shtml文件:


           index.shtml

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>新闻中心</title>
    	<link rel="stylesheet" href="public/css/bootstrap.min.css" type="text/css">
    </head>
    <body>
    	<div class="container">
    		<h3>新闻列表</h3>
    		<ul class="list-group">
    						<li class="list-group-item"><a href="#">今天有一条新闻7</a></li>
    						<li class="list-group-item"><a href="#">今天有一条新闻6</a></li>
    						<li class="list-group-item"><a href="#">今天有一条新闻5</a></li>
    						<li class="list-group-item"><a href="#">今天有一条新闻4</a></li>
    						<li class="list-group-item"><a href="#">今天有一条新闻3</a></li>
    					</ul>
    	</div>
    </body>
    </html>

           当我们不超过300秒,再次访问index.php时,服务器将访问静态文件index.shtml给我们访问。而当静态文件过期后,我们再次访问index.php,服务器将为我们更新index.shtml静态文件。

           这里讲到的只是一种触发静态文件更新的方法,当然还有:手动触发更新(设置后台管理,管理员想立即更新静态文件,就点击运行生成静态文件即可)、Linux服务器下的crontab定时扫描程序(在Linux服务器下,设置命令:

    * /1 * * * * php 路径+文件名    ==>  代表 每一分钟系统将执行一次指定文件


    文件内容可以为:

    		require_once('db.php');
    
    		$connect = Db::getInstance()->connect();
    		$sql = "SELECT * FROM news WHERE `category_id` = 1 AND `status` = 1 ORDER BY id DESC LIMIT 5";
    		$result = mysql_query($sql, $connect);
    		$news = array();
    		while($row = mysql_fetch_array($result)) {
    			$news[] = $row;
    		}
    		//print_r($news);
    		
    		ob_start(); //开启缓存区
    
    		//引入模板文件
    		require_once('templates/singwa.php'); //动态文件    singwa.php界面同样进过缓冲区
    		file_put_contents('index.shtml', ob_get_contents());




    展开全文
  • zblog全站静态化插件 基础官方 php 旧插件修改经测试最新版本可用
  • php页面静态化学习笔记
  • php_seo根据关键字上网搜索含关键字的网站并生成静态html页.zip
  • 本文实例讲述了PHP使用OB缓存实现静态化功能。分享给大家供大家参考,具体如下: 实现步骤 1、创建测试数据表并且写入数据 2、实现后台的更新操作。使用OB缓存针对每一个内容生成对应的HTML文件 3、显示前台的数据...
  • 此资源最好搭配讲解,地址http://blog.csdn.net/m_nanle_xiaobudiu/article/details/79267703
  • 什么是PHP静态化 PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同。 为什么要让网页静态化 一、加快页面打开...
  • 对于伪静态的问题,相信用 WordPress 的朋友都会很熟悉 WP-Cache 这款插件了,不仅因为它出众的性能使其几乎成为 WP 用户必备插件,而且它难以安装也是出了名的。...与 WP-Cache 相同,它也是一款 WordPress “静态化
  • 将PHP的执行页面预先转换成HTML,是所谓的PHP静态化方法之一。 其他还有模板替换法,opcache等方法。 静态化的作用: 提高网站的响应速度,降低服务器的负载; 用于搜索引擎的SEO; 利用PHP输出buffer直接写成html,...
  • php实现页面静态化

    2016-12-26 14:26:39
    php静态静态 案例实现
  • PHP实现页面静态化

    千次阅读 2016-05-12 23:21:44
    为什么要页面静态化?1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快;如果页面中一些内容不经常改动,动态页面静态...

    为什么要页面静态化?

    1.动态文件执行过程:语法分析-编译-运行
    2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快;如果页面中一些内容不经常改动,动态页面静态化是非常有效的加速方法。(纯静态,伪静态还是需要PHP解释器的)
    3、生成静态URL利于SEO,利于蜘蛛抓取和收录,有利于提升排名

    优化页面响应时间方法

    1.动态页面静态化
    2.优化数据库
    3.负载均衡
    4.使用缓存等等
    //动态页面静态化一般用于不经常改动的地方,频繁改动的地方一般不适用静态化,可用伪静态(例如微博等)

    静态化详细介绍

    1、纯静态分为局部静态化(局部动态化,使用AJAX动态获取数据)和纯静态化。
    伪静态:改变URL(需要服务器支持,如:apache等等)
    2、从URL结构以及页面名称看,伪静态和静态页面是一样的。伪静态的页面后缀可以是html htm 或者是目录格式
    伪静态只是改变了URL的表现形式,实际上还是动态页面
    静态页面可以节省服务器资源,而伪静态严格说是增加服务器资源消耗的
    总结,在SEO方面,伪静态和静态页面的功能是相同的,但是伪静态本质上还是动态页面,所以消耗资源是和动态页面一样的,而且因为Rewrite服务器还需要消耗额外的资源。

    Buffer缓冲区认知

    这里写图片描述

    1、开启buffer

    • 在php.ini中的output_buffering开启
    • 在php文件中使用ob_start()函数开启
    ; Default Value: Off
    ; Development Value: 4096
    ; Production Value: 4096
    ; http://php.net/output-buffering
    output_buffering = 4096

    2、获取缓冲区的内容
    output_buffering=on 需要先开起,才能调用ob_get_contents()函数。但是,如果不开启output_buffering时,当在头文件中调用函数ob_start()函数时,ob_get_contents()也能使用。

    ob_get_content();//返回输出缓冲区的内容;

    PHP如何实现页面纯静态化

    基本方式
    1、file_put_contents
    2、使用PHP内置缓存机制实现页面静态化output_buffering

    
    ob_start()//如果php.ini已经开启,那么这里会开启一个新的输出缓冲区;
    ob_get_contents()//获取输出缓冲区内容;
    ob_clean()//清空输出缓冲区内容,但是不会删除输出缓冲区
    ob_get_clean//获取输出缓冲区内容并且删除输出缓冲区,等价于ob_get_contents和ob_end_clean)

    下方这段代码,运行是不会有输出的
    原因就是输出缓冲区被清空了,看上图理解

    ob_start();
    echo 777;
    echo 000;
    ob_clean();
    echo ob_get_contents();

    纯静态实现,代码和实现逻辑参考:

    <?php
    /**
     * 触发系统生成纯静态化页面业务逻辑
     * 有3种方案: 
     * 第一:定时扫描程序(利用crontab来处理)  
     * 第二:手动触发方式,人为触发
     * 第三:页面添加缓存时间,在页面中控制时间来操作
    */
    //===========================================
    //生成纯静态文件步骤
    //1、连接数据库,然后从数据库里面获取数据
    //2、把获取到的数据填充到模版文件里面
    //3、需要把动态的页面转为静态页面,生成静态化文件
    //============================================
    //PHP实现页面静态化有以下步骤:
    //1:A.php请求数据库数据:通过mysql或者mysqli或者PDO扩展
    //2:在A.html中输出A.php请求的数据库数据:一般是将将在数据库中取出的数组形式的数据赋予新的数组,并且输出
    //3:在A.php中包含A.html文件:直接通过require_once()函数或者inclde_once()
    //4:开启数据缓存ob_start()=>获取获取缓存内容并且将数据生成在静态文件中file_put_contents('index.shtml',ob_get_clean());
    //header("content-type:text/htm;charset=utf-8");
    if(is_file('./index.html') && (time() - filemtime('./index.html') < 1200))
    {
        //缓存未失效则直接加载静态文件
        require_once('./index.html');
    }
    else 
    {
        //缓存失效了则重新生成
        // 引入数据库链接操作
        require_once('./db.php');
        $sql = "select * from news where `category_id` = 1 and `status` = 1 limit 4";
        try
        {
                $db = Db::getInstance()->connect();
                $result = mysql_query($sql, $db);
                $newsList = array();
                while($row = mysql_fetch_assoc($result)) 
                {
                        $newsList[] = $row;
                }
        }
        catch(Exception $e)
        {
                // TODO
        }
        ob_start();
        require_once('template/index.php');//引入模版文件
        file_put_contents('./index.html', ob_get_contents());//生成静态文件
        //ob_clean();
    }
    

    静态页面中局部动态化实现

    利用Jquery中的ajax请求文件,获取到返回的JSON数据,然后应用到模版就可以了

    伪静态

    Nginx服务器默认不支持PATH INFO模式,需要额外配置

    Apache伪静态设置


    这里写图片描述
    1、开启apache mod_rewrite.so 配置 在 httpd.conf中。
    测试的话可以用phpinfo查看,看是否loaded modules 有这个模块
    2、inculde conf/extra/httpd-vhosts.conf virtual hosts支持,虚拟域名配置
    3、编辑vartual host 文件
    4、本机host文件加入配置的域名(如果需要本机测试针对windows)
    5、伪静态配置
    - 5.1 rewrite engine on
    - 5.2编写规则

    ^/post/([0-9]*).html$ /post.php?id=$1

    放在 virtualhost 段中
    post.php 中编写

    <?php 
    echo 'this is '.$_GET['id'];

    然后可以访问a.com/123.html 返回的就是this is 123.

    扩展:如果目录下有123.html这个真正的文件,那么还是加载了动态的post 123.
    那么如何设置呢,想要当前文件有了真正的静态文件,那么需要以下配置了

    RewriteEngine on
    RewriteRule ^/post/([0-9]*).html$ /post.php?id=$1
    #存在目录
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-d
    #存在文件
    RewriteCond%{DOCUMENT_ROOT}%{REQUEST_FILENAME}}!-f

    以上两句话意思是如果根目录下有请求的目录或者文件,那就用他
    当然这个要放在刚刚的那个rewrite的上面。

    Nginx伪静态


    这里写图片描述

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

    伪静态是影响服务器性能的,不是越多越好,需要按需求而定

    展开全文
  • 本篇文章主要介绍了详解php实现页面静态化原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 不用mod_rewrite直接用php代码实现伪静态效果,大家看后就会发现php真的很方便
  • Emlog文章页静态化插件,文章页根据最新访问,一天更新一次,此插件能有效降低数据库出错,提升网站的稳定性,让你的博客轻松应付大流量访问。 此插件,可以自行修改,基本能用在任何网站上来进行静态化
  • 实现页面静态化PHP是如何实现的?

    千次阅读 2019-05-29 17:17:53
    随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,...现在很多网站在建设的时候都要进行静态化的处理,为什么网站要进行静态化处理呢?我们...

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

     

    一般情况下会从以下方面来做优化

    1、动态页面静态化

    2、优化数据库

    3、使用负载均衡

    4、使用缓存

    5、使用CDN加速

    现在很多网站在建设的时候都要进行静态化的处理,为什么网站要进行静态化处理呢?我们都知道纯静态网站是所有的网页都是独立的一个html页面,当我们访问的时候不需要经过数据的处理直接就能读取到文件,访问速度就可想而知了,而其对于搜索引擎而言也是非常友好的一个方式。

     

    纯静态网站在网站中是怎么实现的?
    纯静态的制作技术是需要先把网站的页面总结出来,分为多少个样式,然后把这些页面做成模板,生成的时候需要先读取源文件然后生成独立的以.html结尾的页面文件,所以说纯静态网站需要更大的空间,不过其实需要的空间也不会大多少的,尤其是对于中小型企业网站来说,从技术上来讲,大型网站想要全站实现纯静态化是比较困难的,生成的时间也太过于长了。不过中小型网站还是做成纯静态的比较,这样做的优点是很多的。

     

    而动态网站又是怎么进行静态处理的?
    页面静态化是指将动态页面变成html/htm静态页面。动态页面一般由asp,php,jsp,.net等程序语言编写而成,非常便于管理。但是访问网页时还需要程序先处理一遍,所以导致访问速度相对较慢。而静态页面访问速度快,却又不便于管理。那么动态页面静态化即可以将两种页面的好处集中到一起。

     

    静态处理后又给网站带来了哪些好处?

    1、静态页面相对于动态页面更容易被搜索引擎收录。

    2、访问静态页面不需要经过程序处理,因此可以提高运行速度。

    3、减轻服务器负担。

    4、HTML页面不会受Asp相关漏洞的影响。

    静态处理后的网站相对没有静态化处理的网站来讲还比较有安全性,因为静态网站是不会是黑客攻击的首选对象,因为黑客在不知道你后台系统的情况下,黑 客从前台的静态页面很难进行攻击。同时还具有一定的稳定性,比如数据库或者网站的程序出了问题,他不会干扰到静态处理后的页面,不会因为程序或数据影响而 打不开页面。

    搜索引擎蜘蛛程序更喜欢这样的网址,也可以减轻蜘蛛程序的工作负担,虽然有的人会认为现在搜索引擎完全有能力去抓取和识别动态的网址,在这里还是建议大家能做成静态的尽量做成静态网址。

     

    下面我们主要来讲一讲页面静态化这个概念,希望对你有所帮助!

    什么是HTML静态化:

    常说的页面静态化分为两种,一种是伪静态,即url 重写,一种是真静态化
    在PHP网站开发中为了网站推广和SEO等需要,需要对网站进行全站或局部静态化处理,PHP生成静态HTML页面有多种方法,比如利用PHP模板、缓存等实现页面静态化。
    PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同。
    PHP伪静态:利用Apache mod_rewrite实现URL重写的方法。

     

    HTML静态化的好处:

    一、减轻服务器负担,浏览网页无需调用系统数据库。
    二、有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;
    三、加快页面打开速度,静态页面无需连接数据库打开速度较动态页面有明显提高;
    四、网站更安全,HTML页面不会受php程序相关漏洞的影响;观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。数据库出错时,不影响网站正常访问。
    五、数据库出错时,不影响网站的正常访问。
    最主要是可以增加访问速度,减轻服务器负担,当数据量有几万,几十万或是更多的时候你知道哪个更快了. 而且还容易被搜索引擎找到。生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。

     

    实现HTML静态化的策略与实例讲解:
    基本方式
    file_put_contents()函数 
    使用php内置缓存机制实现页面静态化 —output-bufferring.

    方法1:利用PHP模板生成静态页面

    PHP模板实现静态化非常方便,比如安装和使用PHP Smarty实现网站静态化。
    在使用Smarty的情况下,也可以实现页面静态化。下面先简单说一下使用Smarty时通常动态读取的做法。 
    一般分这几步:
    1、通过URL传递一个参数(ID);
    2、然后根据此ID查询数据库;
    3、取得数据后根据需要修改显示内容;
    4、assign需要显示的数据;
    5、display模板文件。
    Smarty静态化过程只需要在上述过程中添加两个步骤。
    第一:在1之前使用 ob_start() 打开缓冲区。
    第二:在5之后使用 ob_get_contents() 获取内存未输出内容,然后使用fwrite()将内容写入目标html文件。
    根据上述描述,此过程是在网站前台实现的,而内容管理(添加、修改、删除)通常是在后台进行,为了能有效利用上述过程,可以使用一点小手段,那就是Header()。具体过程是这样的:在添加、修改程序完成之后,使用Header() 跳到前台读取,这样可以实现页面HTML化,然后在生成html后再跳回后台管理侧,而这两个跳转过程是不可见的。

    方法2:使用PHP文件读写功能生成静态页面

    $out1 = "<html><head><title>PHP网站静态化教程</title></head><body>欢迎访问PHP网站开发www.startphp.cn,本文主要介绍PHP网站页面静态化的方法</body></html>"; 
    $fp = fopen("leapsoulcn.html","w"); 
    if(!$fp) 
    { 
    echo "System Error"; 
    exit(); 
    } 
    else 
    { 
    fwrite($fp,$out1); 
    fclose($fp); 
    echo "Success"; 
    } 

    方法3:使用PHP输出控制函数(Output Control)/ob缓存机制生成静态页面
    输出控制函数(Output Control)也就是使用和控制缓存来生成静态HTML页面,也会使用到PHP文件读写函数。
    比如某个商品的动态详情页地址是: http://xxx.com?goods.php?gid=112
    那么这里我们根据这个地址读取一次这个详情页的内容,然后保存为静态页,下次有人访问这个商品详情页动态地址时,我们可以直接把已生成好的对应静态内容文件输出出来。

    PHP生成静态页面实例代码 1

    ob_start(); 
    echo "<html>". 
    "<head>". 
    "<title>PHP网站静态化教程</title>". 
    "</head>". 
    "<body>欢迎访问脚本之家,本文主要介绍PHP网站页面静态化的方法</body>". 
    "</html>"; 
    $out1 = ob_get_contents(); 
    ob_end_clean(); 
    $fp = fopen("leapsoulcn.html","w"); 
    if(!$fp) 
    { 
    echo "System Error"; 
    exit(); 
    } 
    else 
    { 
    fwrite($fp,$out1); 
    fclose($fp); 
    echo "Success"; 
    } 

    PHP生成静态页面实例代码 2

    $gid = $_GET['gid']+0;//商品id 
    $goods_statis_file = "goods_file_".$gid.".html";//对应静态页文件 
    $expr = 3600*24*10;//静态文件有效期,十天 
    if(file_exists($goods_statis_file)){ 
     $file_ctime =filectime($goods_statis_file);//文件创建时间 
     if($file_ctime+$expr-->time()){//如果没过期 
      echo file_get_contents($goods_statis_file);//输出静态文件内容 
      exit; 
     }else{//如果已过期 
      unlink($goods_statis_file);//删除过期的静态页文件 
      ob_start(); 
    
      //从数据库读取数据,并赋值给相关变量 
    
      //include ("xxx.html");//加载对应的商品详情页模板 
    
      $content = ob_get_contents();//把详情页内容赋值给$content变量 
      file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中 
      ob_end_flush();//输出商品详情页信息 
     } 
    }else{ 
    ob_start(); 
    
     //从数据库读取数据,并赋值给相关变量 
    
     //include ("xxx.html");//加载对应的商品详情页模板 
    
     $content = ob_get_contents();//把详情页内容赋值给$content变量 
     file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中 
     ob_end_flush();//输出商品详情页信息 
    
    } 

    我们知道使用PHP进行网站开发,一般执行结果直接输出到游览器,为了使用PHP生成静态页面,就需要使用输出控制函数控制缓存区,以便获取缓存区的内容,然后再输出到静态HTML页面文件中以实现网站静态化。

    PHP生成静态页面的思路为:首先开启缓存,然后输出了HTML内容(你也可以通过include将HTML内容以文件形式包含进来),之后获取缓存中的内容,清空缓存后通过PHP文件读写函数将缓存内容写入到静态HTML页面文件中。
    获得输出的缓存内容以生成静态HTML页面的过程需要使用三个函数:ob_start()、ob_get_contents()、ob_end_clean()。


    知识点:
    1、ob_start函数一般主要是用来开启缓存,注意使用ob_start之前不能有任何输出,如空格、字符等。
    2、ob_get_contents函数主要用来获取缓存中的内容以字符串形式返回,注意此函数必须在ob_end_clean函数之前调用,否则获取不到缓存内容。
    3、ob_end_clean函数主要是清空缓存中的内容并关闭缓存,成功则返回True,失败则返回False
    方法4:使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存);
    以memcache为例:

    gid = $_GET['gid']+0;//商品id 
    $goods_statis_content = "goods_content_".$gid;//对应键 
    $expr = 3600*24*10;//有效期,十天 
    $mem = new Memcache; 
    $mem--->connect('memcache_host', 11211); 
    $mem_goods_content = $mem->get($goods_statis_content);  
    if($mem_goods_content){ 
     echo $mem_goods_content; 
    }else{ 
     ob_start(); 
    
     //从数据库读取数据,并赋值给相关变量 
    
     //include ("xxx.html");//加载对应的商品详情页模板 
    
     $content = ob_get_contents();//把详情页内容赋值给$content变量 
     $mem->add($goods_statis_content,$content, false, $expr); 
     ob_end_flush();//输出商品详情页信息 
    
    } 

    memcached是键值一一对应,key默认最大不能超过128个字节,value默认大小是1M,因此1M大小满足大多数网页大小的存储。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,677
精华内容 49,470
关键字:

php静态化