PHP页面静态
PHP页面的静态化很有必要,尤其是在CMS系统中,一些内容一旦生成,基本上不会有变化,这时如果用html将页面静态化,无疑会减少服务其解析PHP页面的负担。无论是利用框架还是简单的脚本,原理基本一致:就是利用PHP进行文件操作,替换html模板中的动态元素。
关键点: 生成静态内容
创建静态文件
保存静态文件标识
删改静态文件
第一点:生成静态内容 就是利用创建文章得到的一些内容,这个基本上类似,但是也有各自的特色等,例如:标题,时间,作者,关键字,来源,内容等。把这些内容通过编辑器编辑后提交到生成页面,然后读取模板文件(.html) 在模板文件中有以上相应字段的关键字,就是替换的关键字,例如{title}{author}{content},这个因人而异,只要不重复就可以,然后用函数把从提交页面得到的相应内容替换相应的字段。最后得到的就是静态的内容。
第二点:创建静态文件,PHP有一系列相应的文件操作函数可以迅速的创建静态文件,在这里面有几点需要注意,首先是标题,我看过有些PHPer创建静态文件直接用数字或者字母等无关对应文章的内容来做标题,这样对于搜索引擎的优化无法起到作用,其次是文件的唯一性,不要起得文件名重复了,这样会引起未知错误。再次是文件的权限问题,要能创建文件 但是又不能让文件权限有安全漏洞。
第三:保存静态文件标识,这里用到了数据库,其实文章的内容等text类型的数据一般也存在数据库中,但是只是用来生成或者更新静态文件,每次读取的时候是读取的静态文件。这里一般的标识是文章的标题等。然后对应的每个标识有一个相应的path(路径)字段用来做链接到静态文件的超链接。
第四:虽然生成的文件变化的次数不多,但是更改是少不了的,这时候就需要重新生成静态页面了 用unlink函数删除原来的页面然后重复上面的步骤生成一个新的页面,同时更新数据库相应的内容。
下面是例子,
其中的数据库操作类文件我已经发表过了在PHP操作数据库Mysql类文件
这个例子有些粗糙 但是我只是让说明下上面的过程,至于完善的PHP静态类我稍后会整理发表
数据库
CREATE TABLE IF NOT EXISTS `news` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`content` text NOT NULL,
`path` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
PHP代码
header("Content-type:text/html;charset=utf8");$action = empty($_POST['action'])?'':$_POST['action'];if($action == 'add'){include_once 'config/db.php'; //包含数据库的配置文件include_once 'class/conn.class.php'; //包含数据库的操作类extract($_POST); //把提交的数据从数组生成相应的变量$filename = 'html'.rand(1,10).date("YmdHis",time()); //静态页面的名称$html_content = file_get_contents('demo.html'); //获得静态页面的模板内容$html_content = str_replace('{title}', $title, $html_content); //在模板中替换相应的标题$html_content = str_replace('{content}', $content, $html_content);//在模板中替换相应的内容$filename = 'htmls/'.$filename.'.html';//获得静态页面的全部路径,相对路径if(!file_exists($filename)){//生成静态页面$fp=fopen("$filename","w+");fputs($fp,$html_content);fclose($fp);}$db = new db;//生成数据库操作类$SQL = "insert into news(`title`,`content`,`path`) values ('$title','$content','$filename')";$check = $db->ExecuteSQL($SQL); //把数据存储到数据库中if($check){echo "成功";}else{echo "失败";}}
至于提交的页面就省略了。
目录结构
稍后会总结成一个比较完善的PHP静态页面生成类
页:
[1]