【PHP CMS系统】-- 新闻管理系统 1

实现全站真静态化。

一般CMS系统都分为前台和后台, 前台系统是给用户看的,而后台则是管理员添加,修改,删除页面的地方。

在CMS系统中,前台一般都是html静态页面。

后台的责任是完成CRUD操作后更新静态页面。在更新静态页面的时候需要注意,是不是已更新完毕就立即更新,或者是定时更新。

通常例如Dede CMS系统和传智 CMS系统都是管理员手动点击更新(就是再走一遍控制器,使用ob缓存)。

或者想A67电影网是定时更新,一天更新一次而不是一但后台更新就生成新的页面。

 

需要记住的几点技巧:

1. 告诉后台你所要执行的是什么操作:

<!--隐藏区-->
<input type='hidden' name='oper' value='add'/>

例如上面的代码告诉浏览器我是要执行add的操作,这种方式通常都是在html中加入一段隐藏代码,不显示给用户。

 

2. 要了解系统基本结构:

CMS系统一般分为前台和后台。

前台多为html静态页面。后台有manager的登录页面和控制器。所有的crud操作都是在后台执行。

前台:

后台:

 

3. 最主要的是要了解缓存的机制:

PHP缓存技术一般有三种:

一种是ob缓存,第二种是程序缓存,第三种是浏览器缓存。

 

先了解什么是程序缓存:

如果在没有开启OB缓存的时候,那么所有的echo语句的输出都会放到程序缓存,自上而下的放置,到代码执行完毕之后会将程序缓存中的内容全部输出给浏览器显示。

但有个限制,header头文件必须出现在所有echo语句之前,一旦ob缓存没有开启,并且有echo语句出现在了header之前,那就会出错。

看一段代码:

<?php

 

                echo "hello100";

                header("content-type:text/html; charest=utf-8");

                echo "hello200";

?>

 

说明:在php5.2版本中,在php.ini有一个配置  output_buffering,默认是关闭,如果是关闭的,则刚才的代码就会有警告。 Can not modify the header.

但需要说明的是

程序并不是一执行就返回到浏览器,而是等代码执行完毕后,才会一起返回给浏览器。

 

如果一定想按照如此的次序放置,那么就得开启ob缓存,开启的方式是:

ob_start(); // 开启ob缓存
ob_get_contents(); //得到ob缓存中的内容
ob_clean(); //清空ob缓存中的内容

如果开启了ob缓存,那么:

所有echo的语句都会放到ob缓存中,所有header的语句就会放到程序缓存中。

等程序执行到最后,会将ob缓存中的东西全都添加到程序缓存的内容之后。

这样就可以解决问题,因为头在前面,数据在后面。

 

看几个例子,了解ob缓存:

  • 如下程序则运行的结果?

<?php

                ob_start(); //open ob buffering

                echo "hello100";

                header("content-type:text/html; charest=utf-8");

                echo "hello200";

                echo "hello300";

                echo "hello400";

                //ob_get_contents — 返回输出缓冲区(ob)的内容, 只是得到输出缓冲区的内容,但不清除它。

                $str = ob_get_contents();

                //把str保存到文件中

                file_put_content("mylog.txt", $str);

                echo "hello500";

                echo "hello600";

?>

在页面中:会输出hello100-hello600

在mylog文件中会保存hello100-hello300

 

4. 关于ob缓存其他的一些函数:

ob_end_clean: 清空(擦除)缓冲区并关闭(ob)输出缓冲。

Answer: 看到的是hello300 hello300 hello500 hello600

文件中的是: hello300 hello300

 

ob_end_flush: 冲刷出(送出)输出缓冲区内容并关闭缓冲。

Answer: 页面输出hello100-600

文件中输出的是:空 (因为ob缓存已经关闭)

 

说明:这个函数和ob_end_clean的区别是,ob_end_clean不输出ob缓存区中的内容,但是ob_end_flush则会输出其中的内容,但两者都会关闭缓存区中的内容。

ob_flush:冲刷出(送出)输出缓冲区中的内容, 但是不关闭缓存。

flush: 刷新输出缓冲, 把程序缓存的数据,强制刷新到浏览器缓存。

<?php

            echo str_repeat(' ',1024);

            for($i = 0; $i < 5; $i++){

                        echo $i;

                        //强制吧程序缓存的数据,刷新到浏览器中去

                        flush();

                        sleep(1); //sleep 1 second

            }

?>

程序会每隔一秒输出一个数字

注意:1. ob缓存先要禁用,如果不禁用,则echo的数据全都去ob缓存了,程序缓存中没有数据,那么这段程序将在5秒钟之后,将数据一同输出到页面中。

2. 一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。所以使用echo str_repeat(' ',1024);

3. 说明了浏览器缓存的存在。

 

 

 

 

posted @ 2013-06-14 21:07  Zhentiw  阅读(492)  评论(0编辑  收藏  举报