基于php.mysql动态网页生成静态网页技术
http://beauty9235.home.sunbo.net 原创:
1: 本篇严禁转载
2: 文章如有不对之持请联系我或在本贴提出疑问,但不允许无意义回复.
一 、 引 言
本文将结合笔者实际开发过程中,基于mysql,php由动态网页生成静态网页的技术。为什么要生态静态页?在速度与功能并重的今天,网页必须有足够快的速度来运行,当你打开一个网页的时候,让你等上一分钟以前,恐怕你去了第一次,不会有第二次。于是由动态网页生成静态网页技术己成为开发网站的重要技术。
二、基础:smarty\adodb
三、开发思路:
读取数据库--->保存为数组变量---->读取模板----->返回缓冲区内容----->生成静态页
四、数据库建模
--
-- 数据库: `weekday`
--
-- --------------------------------------------------------
--
-- 表的结构 `adminuser`
--
CREATE TABLE `adminuser` (
`adminname` varchar(15) NOT NULL default '',
`adminpwd` varchar(15) NOT NULL default ''
) TYPE=MyISAM;
--
-- 导出表中的数据 `adminuser`
--
INSERT INTO `adminuser` VALUES ('admin', 'admin');
-- --------------------------------------------------------
--
-- 表的结构 `board`
--
CREATE TABLE `board` (
`id` int(11) NOT NULL auto_increment,
`parentid` int(11) NOT NULL default '0',
`idclass` varchar(15) NOT NULL default '',
`title` varchar(50) NOT NULL default '',
`content` text NOT NULL,
`username` varchar(15) NOT NULL default '',
`remoteip` varchar(50) NOT NULL default '',
`createdate` varchar(25) NOT NULL default '',
`modifydate` varchar(25) NOT NULL default '',
`email` varchar(25) NOT NULL default '',
`type` varchar(15) NOT NULL default '',
`httpadress` varchar(25) NOT NULL default '',
`hits` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=263 ;
--
-- 导出表中的数据 `board`
--
五、开发过程。
A、所需函数及扩展类的编写
生成静态页函数
//把生成文件的过程写出函数
function php_html($file_name,$file_content)
{
if (is_file ($file_name)){ //判断给定文件名是否为一个正常的文件
@unlink ($file_name); //删除文件,如果成功则返回 TRUE,失败则返回 FALSE
}
$fp = fopen ($file_name,"w"); //将 filename 指定的名字资源绑定到一个流上 ,'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
if (!is_writable ($file_name)){ //判断给定的文件名是否可写
return false;
}
if (!fwrite ($fp,$file_content)){//把 string 的内容写入文件指针 handle 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
return false;
}
fclose ($fp); //关闭指针
return $file_name;
}
//数据库连接封装函数
function dbConnection($debug = false){
global $db;
if (!isset($db)){
global $DBTYPE,$HOST,$USER,$PASSWORD,$DATABASE;
require_once("adodb.inc.php");
$db = NewADOConnection($DBTYPE);
$db -> debug = $debug;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
if(!$db->Connect($HOST, $USER, $PASSWORD, $DATABASE)){
exit("数据库错误!");
}
}
return $db;
}
至此我们的函数及类己建完成。
常量、变量设置:
$DBTYPE = "mysql"; //数据库连接类型
$HOST = "localhost"; //服务器
$USER = "root"; //用户名
$PASSWORD = ""; //用户密码
$DATABASE = "weekday"; //用户密码
//试测文件
test.php
//############################################
<?php
Error_reporting(E_ALL);
ob_start();//打开输出缓冲区当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓/冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容
//把生成文件的过程写出函数
function php_html($file_name,$file_content)
{
if (is_file ($file_name)){ //判断给定文件名是否为一个正常的文件
@unlink ($file_name); //删除文件,如果成功则返回 TRUE,失败则返回 FALSE
}
$fp = fopen ($file_name,"w"); //将 filename 指定的名字资源绑定到一个流上 ,'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
if (!is_writable ($file_name)){ //判断给定的文件名是否可写
return false;
}
if (!fwrite ($fp,$file_content)){//把 string 的内容写入 文件指针 handle 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
return false;
}
fclose ($fp); //关闭指针
return $file_name;
}
define("_SELF_ROOT", "../");
require_once("smarty.class.php");
class TemplateSmarty extends smarty
{
function TemplateSmarty($check_error = false){
$this->template_dir = '';
$this->compile_dir = _SELF_ROOT;
$this->config_dir = '';
$this->cache_dir = '';
$this->left_delimiter = '<{';
$this->right_delimiter = '}>';
$this->debugging =$check_error;
}
}
function dbConnection($debug = false){
global $db;
if (!isset($db)){
global $DBTYPE,$HOST,$USER,$PASSWORD,$DATABASE;
require_once("adodb.inc.php");
$db = NewADOConnection($DBTYPE);
$db -> debug = $debug;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
if(!$db->Connect($HOST, $USER, $PASSWORD, $DATABASE)){
exit("数据库错误!");
}
}
return $db;
}
$DBTYPE = "mysql";//数据库连接类型
$HOST = "localhost"; //服务器
$USER = "root"; //用户名
$PASSWORD = ""; //用户密码
$DATABASE = "weekday"; //数据库名
$db = dbConnection();
if($rs = $db->Execute("select * from board ")) {
while(!$rs->EOF){
$weekday[] = array(
'title' => $rs->fields['title'],
'content' => $rs->fields['content'],
);
$rs->MoveNext();
}
}
$tpl = new TemplateSmarty;
$tpl -> TemplateSmarty();
$tpl->assign('weekday', $weekday);
$tpl->display('test.tpl');
$body_content = ob_get_contents(); //返回内部缓冲区的内容,这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE.
//echo $body_content;
ob_end_clean();//删除内部缓冲区的内容,并且关闭内部缓冲区
$filename = "index.html";
if(php_html($filename,$body_content))
echo "生成成功 $filename";
else
echo "$filename没有生成成功";
?>
//############################################
test.tpl
//#################################
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<{section name=loop loop=$weekday}>
<{$weekday[loop].title}>
<{$weekday[loop].content}>
<br>
<{/section}>
</body>
</html>
//#################################
全文完
欢迎访问个本人网站
http://beauty9235.home.sunbo.net
-- ※ Origin: 川农学子在线 <http://beauty9235.home.sunbo.net> ◆