首页 网站知识 网站案例 网站制作流程 网站制作价格 网站定制 联系我们
Q Q
电 话
手 机
Q Q
电 话
手 机

简单静态页生成 过程

发布时间:2020-04-06 00:00
发布者:网站定制网
浏览次数:
一直用smarty的cache,但感觉还是要自己做一个,才有感觉。网上有很多牛人的功能比较完备,打算先自己搞简单的再慢慢丰满。这两天做了一个比较简单的,在hi.baidu.net/alex_wang58记录一下。
一、用到的相关技术
关键词
:PHP, Apache,
mod_rewrite (RewriteCond,RewriteRule)地址重写,
ob系列函数缓冲
file_put_contents生成html

、流程:用户发出请求url?id=x ,判断文章是否存在
(1)存在则直接转到对应的Html页面。
(2)不存在通过php读取数据库数据,然后生成html文件,并存放到指定目录。
三、
实现方法

(1)地址重写用Apahce的mod_rewrite模块中的RewriteRule指令实现重写(mod_rewrite的开启和简单规则见本博另一篇
http://hi.baidu.com/alex%5Fwang5 ... 0346ffb3fb952e.html
)。
(2)判断文章是否存在用Apahce 的mod_rewrite模块中的RewriteCond指令
(3)生成html文件:
ob_star()打开缓冲,将读取文章的php包含进来,然后用file_put_contents将获得的缓冲内容写入指定HTMl文件。
四、代码

/Test 目录下的 .htaccess

文件内容:
RewriteEngine On
RewriteRule ^index.html$ /news.php [L]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^html/news_([0-9]+).html$ getnews.php?id=$1 [L]
对news.php的访问将通过 localhost/Test/index.html 实现由第二句
RewriteRule ^index.html$ Test/news.php [L] 实现

news.php =============================>
news.php将列出文章标题链接。
复制PHP内容到剪贴板
PHP代码:
("Content-Type:text/html; charset=gbk"); //以防出现乱码
mysql_connect("localhost","root","");
mysql_query('SET NAMES gbk'); //我的数据库用的gbk编码,请根据自己实际情况调整
mysql_select_db("test");
$sql = "SELECT `id`,`title` FROM `arc` order by `id` DESC";
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs) ){
echo "$row[title]
";
}
?>


比如生成了php静态页实现
当点击链接发出对 http://localhost/Test/html/news_3.html 的请求时
Apache将会判断 news_3.html 是否存在,由 .htaccess中的第三句
RewriteCond %{REQUEST_FILENAME} !-s
实现:


RewriteCond 是“定向

重写发生条件”。
REQUEST_FILENAME 这个参数是“客户端请求的文件名”
'-s' (是一个非空的常规文件[size]) 测试指定文件是否存在而且是一个尺寸大于0的常规的文件.
!表示
匹配条件的反转。
所以
RewriteCond 这句就表示当请求链接不存在时 执行下面的
RewriteRule 规则。
所以当请求的

news_3.html 不存在时会重写地址让
getnews.php?id=3 来处理(否则如果
news_3.html 存在则直接就加载该html文件
)。
getnews.php ===================>功能:判断参数传输的完整性,并调用相应文件生成html文件。

复制PHP内容到剪贴板
PHP代码:
=$_GET['id'];
$root =& $_SERVER['DOCUMENT_ROOT'];
$filename = "news_".$id.".html";
$file = $root."/Test/html/".$filename;
ob_start();
include($root."/Test/newsDetail.php");
file_put_contents($file,ob_get_contents());
ob_end_flush();
?>



newsDetail.php ====================> 从数据库中读取数据,产生新闻内容,内容被

getnews.php捕获

复制PHP内容到剪贴板
PHP代码:
("Content-Type:text/html; charset=gbk");
if( isset($_GET['id']) ){
$id = & $_GET['id'];
}else{
header("Location: http://127.0.0.1/lean/Test/html/news_failed.html");
exit();
}
mysql_connect("localhost","root","");
mysql_query('SET NAMES gbk');
mysql_select_db("test");
$id =$_GET['id'];
$sql = "SELECT `news` FROM `arc` WHERE `id`=$id";
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs) ){
echo $row['news'];
}
?>

这样将会在/Test/html 目录下产生以 news_文章ID.html 命名的html文件。
PS: 一开始在判断是否存在相应html页面时采用的是 php 内置的 file_exists() 判断,而不用Apache的

RewriteCond,也即没有
RewriteCond %{REQUEST_FILENAME} !-s
。看似可行,但结果会产生“
循环重定向
”的问题。

news_3.html
不存在时 我们需要用
getnews.php生成
news_3.html
,生成完毕后需要转向到
news_3.html ,于是又形成了一次请求mod_rewrite又启动把
news_3.html重写为 getnews.php?id=3 这就形成了死循环了。所以把文件存在性的判断交给
RewriteCond ,指定的html文件不存在时才启用重写规则。这样
循环重定向的问题就没有了。
一开始没有采用fopen打开

newsDetail.php,然后再将生成的内容fwrite成html文件
,然后include输出静态页面。后来在
fhjr999的提醒下,改为:将newDetail.php包含进
getnews.php,通过ob系列函数将生成的内容放入缓冲,然后再生成html文件。ob的效率是前者的20倍左右。

热点地区网站制作
热门地区网站设计制作、为客户量身定制一个适合自己的推广营销型网站
|曲阳做网站
隶属保定市辖县,位于中国河北省保定市西南部,太行山东麓脚下,雕刻之乡(还有一个是福建惠安)人口53万(2001年),面积1083.7平方公里,辖4镇11乡,县府驻恒州镇。工业的主导产业
|璧山网站制作
璧山县位于重庆市以西,东经106°02'至东经106°20',北纬29°17'至29°53'。东西宽15.5公里,南北长66.5公里,县域面积915平方公里。东邻沙坪坝、九龙坡;南界江津;西连铜梁、永川;北接
|鄂托克企业做网站
鄂托克旗位于内蒙古自治区西南部,鄂尔多斯市西部,东经106°41′-108°54′,北纬38°18′-40°11′之间。东邻杭锦旗,西连宁夏陶乐县并隔黄河与石嘴山市和阿拉善盟相望,南接乌审旗和
|江华网站推广
江华瑶族自治县位于湖南省正南边陲、湘桂粤三省(区)结合部,地处东经111°25'至112°09',北纬24°10'至25°10'之间。东北接蓝山县;东南邻广东省连州市、连南瑶族自治县、连山壮族瑶族自治
|嘉荫网络推广
嘉荫县因嘉荫河得名,位于黑龙江省北部,东北界河黑龙江与俄罗斯相邻,属伊春市辖县,面积6740平方公里,人口7.3万。设朝阳、乌云、乌拉嘎3镇及常胜等6乡。省属嘉荫农场和乌拉嘎金
|金阳网站建设
金阳地处四川省凉山彝族自治州东部,距中国航天城西昌215公里,与昭觉、布拖、雷波三县毗邻,隔金沙江与云南省永善县相望,幅员1588平方公里,辖5个工委、34个乡(镇),总人口
|昌黎网站建设
昌黎县位于河北省东北部,隶属于秦皇岛市管辖,是全省首批扩权县之一。地处京津唐经济区、东北经济区、环渤海经济区三大经济区交汇处,北枕碣石,东临渤海,西南挟滦河。全县
|京口网站建设
京口区,镇江市辖区,镇江市的政治、经济和文化中心,面积126平方公里,常驻人口38.8万,下辖6个街道,1个省级开发区,1个港口产业园区,1个场圃。京口汉称京口里,至东吴孙权筑
|大兴网站建设
大兴,地处北京南郊平原,区位优势得天独厚。大兴是北京市唯一一个拥有两个新兴卫星城的郊区县。其中,区政府所在地黄村卫星城距市区南三环仅13公里,它是1984年国务院批准建设
|滦南网站建设
滦南县位于河北省东北部,距唐山市44公里。1988年被国务院准为沿海经济开放县。辖28个乡镇,594个行政村,总人口为58万人,总面积为1270平方公里,有耕地7.4万公顷。滦南县工业以造
|定结网站建设
定结县位于西藏自治区南部、日喀则地区南部、喜马拉雅山北麓,是西藏自治区边境县之一。总面积5816平方千米。总人口2万人(2003年)。县人民政府驻江嘎镇,邮编:857900。行政区划
|巨鹿网站建设
巨鹿县隶属河北省邢台市,巨鹿县地处河北省南部,北距省会石家庄市110公里,西距邢台市65公里,距京广铁路、京深高速公里60公里,东距京九铁路55公里;总面积623平方公里,耕地4.6万
推荐地区
重点地网站设计、网站建设、网站维护服务推荐,完善的售前售后服务保障客户推广的有效
|伊宁做网站
伊宁企业做网站,伊宁比较好的网络公司,伊宁专业的网站建设
|益阳网站制作
益阳企业做网站,益阳比较好的网络公司,益阳专业的网站建设
|安顺企业做网站
安顺企业做网站,安顺比较好的网络公司,安顺专业的网站建设
|白山网站推广
白山企业做网站,白山比较好的网络公司,白山专业的网站建设
|新余网络推广
新余企业做网站,新余比较好的网络公司,新余专业的网站建设
|固原网站建设
固原企业做网站,固原比较好的网络公司,固原专业的网站建设
|哈密网站建设
哈密企业做网站,哈密比较好的网络公司,哈密专业的网站建设
|中山网站建设
中山企业做网站,中山比较好的网络公司,中山专业的网站建设
|黑河网站建设
黑河企业做网站,黑河比较好的网络公司,黑河专业的网站建设
|渭南网站建设
渭南企业做网站,渭南比较好的网络公司,渭南专业的网站建设
|焦作网站建设
焦作企业做网站,焦作比较好的网络公司,焦作专业的网站建设
|宣城网站建设
宣城企业做网站,宣城比较好的网络公司,宣城专业的网站建设
热点TAG
网站制作热点内容汇集,展示最新的网站建站TAG,热点做网站内容
友情链接
需要添加联系请联系在线客服,需要百度权重大于2,网络相关行业优先