php生成静态文件分页问题

如笔者辈内定分页时,每页20篇。某子频道列表内小说经数据库查询为45条,则,首先大家透过查询获得如下参数:1,总页数;2,每页篇数。第二步,for
($i = 0; $i allpages;
$i++State of Qatar,页面成分获得,解析,小说生成,都在那循环中施行。不一致的是,die
(创设文件.$filename.成功!;那句去掉,放到循环后的展现,因为该语句将中止程序施行。例:
Code: $fp = fopen (temp.html,rState of Qatar; $content = fread ($fp,filesize
(temp.html卡塔尔(قطر‎卡塔尔; $onepage = ”20”; $sql = select id from article where
channel=”$channelid”; $query = mysql_query ($sql); $num =
mysql_num_rows ($query); $allpages = ceil ($num / $onepage); for ($i =
0;$i$allpages; $i++){ if ($i == 0){ $indexpath = index.html; } else {
$indexpath = index_.$i.html; } $start = $i * $onepage; $list = ””;
$sql_for_page = select name,filename,title from article where
channel=”$channelid” limit $start,$onepage; $query_for_page =
mysql_query ($sql_for_page); while ($result = $query_for_page){
$list .= ””.$title.””; } $content = str_replace ({ articletable
},$list,$content); if (is_file ($indexpath卡塔尔国卡塔尔{ @unlink ($indexpath卡塔尔国;
//若文件已存在,则删除 } $handle = fopen ($indexpath,w卡塔尔;
//张开文件指针,创立文件 /* 检查文件是或不是被创建且可写 */ if
(!is_writable ($indexpath卡塔尔卡塔尔(قطر‎{ echo
文件:.$indexpath.不可写,请检查其特性后重试!; //改过为echo } if
(!fwrite ($handle,$contentState of Qatar卡塔尔(قطر‎{ //将新闻写入文件 echo
生成文件.$indexpath.败北!; //纠正为echo } fclose ($handle卡塔尔(قطر‎; //关闭指针
} fclose ($fp卡塔尔; die
(生元素页文件完成,如生成不完全,请检查文件权限系统后再一次生成!State of Qatar;?
大致思路如此,此中如别的数据变化,数据输入输出检查,分页内容针对等可讨论在页面中步入。
在骨子里小说系统管理进程个中,还应该有为数不菲难题有待思索,与动态页面分化之处,需注意之处还应该有大多。但大要思路就是如此,此外方面可依此类推而得。

php中荦荦大者选用的正是要用到fread(卡塔尔(قطر‎和fwirte(卡塔尔国。而静态页素不相识成了之后,就能够拉拉扯扯到校勘的难题。这里能够用到正则相配的法门来替换模版中更动的部位。但是此种方法太难为,值得推介的措施是直接把原来生成的模板砍掉,重新生成,呵呵,真正的一死了之。
还必要验证的一些便是,这种改换静态页面包车型地铁方式平时都用于那么些变化不是很频仍的页面,例如音讯的末梢页面。而针对列表页,假设新闻更新不是很频仍的话,也是长项的。今后网络流行好些个可以变动静态页面包车型客车blog只怕论坛程序,都以透过手动点击后台“生成html页”的开关来“半机关”生成html的。而对有的音讯量异常的大的门户网址,则不算。因为静态页之所以叫“静态”,是因为其不可自行改动。假诺新闻列表每一天更新九15遍,那么静态的列表页就要重新生成一百次。假诺本人有13个那样的栏目,这动脑筋也够心悸的了。
好了,闲话休说,现在来会见实际的主次演示:
first:是叁个使用ob函数来促成的,代码比较轻便,功用绝对也高级中学一年级些。
复制代码 代码如下:
ob_start();
@readfile(“”);
$text = ob_get_flush();
$myfile = fopen(“myfile.html”,”w”);
$text =
str_replace (“{counent}”,$string,$text);
fwrite($myfile,$text);
ob_clean();
?>

因为就算要调换静态页面,动态读取那有个别也是要封存的,把多少插入数据库后,把url传递给readfile函数,然后读入缓存,fwrite一下就足以扭转静态页面,那些是驼驼最赏识的一种作法。代码行数起码,功用最高。
second:普通生成静态html页。
这种作法正是安分守纪的来做,fread进来页面,然后str_replace替换
率先是创建最终内容页:
PHP代码
复制代码 代码如下:
$title = “”;
$file = “TwoMax Inter test templet,
author:[email=Matrix@Two_Max]Matrix@Two_Max[/email]”;
$fp = fopen (“temp.html”,”r”);
$content = fread($fp,filesize (“temp.html”));
$content = str_replace(“{file}”,$file,$content);
$content = str_replace(“{title}”,$title,$content);
$filename = “test/test.html”;
$handle = fopen ($filename,”w”卡塔尔; //张开文件指针,成立文件
/*  检查文件是还是不是被成立且可写 */
if (!is_writable ($filename))
{
die (“文件:”.$filename.”不可写,请检查其质量后重试!”卡塔尔国;
}
if (!fwrite ($handle,$content))
{ //将音信写入文件
die (“生成文书”.$filename.”战败!”卡塔尔国;
}
fclose ($handle卡塔尔(قطر‎; //关闭指针
die (“创制文件”.$filename.”成功!”卡塔尔国;
?>

这一步比较轻松。只是独自的变量替换就能够。倘若要扭转静态的列表页面包车型大巴话,原理也是一致,用程序来变化小说列表,把它就是七个大的变量,替换模版中的变量,列表的翻页页是那样。当然,假如有音信更新的话,列表翻页也是要重复生成的。
PHP代码
复制代码 代码如下:
$title = “http://”;
$file = “TwoMax Inter test templet,
author:[email=Matrix@Two_Max]Matrix@Two_Max[/email]”;
$fp = fopen (“temp.html”,”r”);
$content = fread ($fp,filesize (“temp.html”));
$content = str_replace (“{file}”,$file,$content);
$content = str_replace (“{title}”,$title,$content);
// 生成列表以前
$list = ”;
$sql = “select id,title,filename from article”;
$query = mysql_query ($sql);
while($result = mysql_fetch_array ($query))
{
$list .=
”.$result[‘title’].’
‘;
}
$content .=
str_replace(“{articletable}”,$list,$contentState of Qatar;//生成列表结束
// echo $content;
$filename = “test/test.html”;
$handle = fopen ($filename,”w”);
//展开文件指针,创制文件
/* 检查文件是或不是被创建且可写 */
if(!is_writable ($filename))
{
die (“文件:”.$filename.”不可写,请检查其性子后重试!”卡塔尔;
}
if(!fwrite($handle,$content))
{ //将音讯写入文件
die (“生成文书”.$filename.”退步!”卡塔尔国;
}
fclose($handle卡塔尔; //关闭指针
die (“成立文件”.$filename.”成功!”State of Qatar;
?>

有关翻页:
如作者辈钦赐分页时,每页20篇。某子频道列表内随笔经数据库查询为45条,则,首先大家由此询问取得如下参数:1,总页数;2,每页篇数。第二步,for
($i = 0; $i < allpages;
$i++卡塔尔国,页面成分取得,深入分析,文章生成,都在这里循环中实践。差异的是,die
(“创立文件”.$filename.”成功!”;那句去掉,放到循环后的来得,因为该语句将暂停程序实施。
例:
PHP代码
复制代码 代码如下:
$fp = fopen (“temp.html”,”r”);
$content = fread ($fp,filesize (“temp.html”));
$onepage = ’20’;
$sql = “select id from article where channel=’$channelid'”;
$query = mysql_query ($sql);
$num = mysql_num_rows ($query);
$allpages = ceil ($num / $onepage);
for ($i = 0;$i{
if ($i == 0)
{
$indexpath = “index.html”;
}
else
{
$indexpath = “index_”.$i.”html”;
}
$start = $i * $onepage;
$list = ”;
$sql_for_page = “select name,filename,title from article where
channel=’$channelid’ limit $start,$onepage”;
$query_for_page = mysql_query ($sql_for_page);
while ($result = $query_for_page)
{
$list .=
”.$title.’
‘;
}
$content = str_replace(“{articletable}”,$list,$content);
if (is_file ($indexpath))
{
@unlink ($indexpath卡塔尔; //若文件已存在,则删除
}
$handle = fopen ($indexpath,”w”卡塔尔(قطر‎; //展开文件指针,成立文件
/*检查文件是还是不是被成立且可写 */
if (!is_writable ($indexpath))
{
echo “文件:”.$indexpath.”不可写,请检查其脾性后重试!”; //校订为echo
}
if (!fwrite ($handle,$content))
{//将消息写入文件
echo “生成文书”.$indexpath.”退步!”; //修正为echo
}
fclose ($handle卡塔尔(قطر‎; //关闭指针
}
fclose ($fp);
die
(“生成分页文件完结,如生成不完全,请检查文件权限系统后再一次生成!”State of Qatar;
?>

third:smarty模版生成静态页面
smarty自身有七个fetch函数,其固守有一些相符于fread(卡塔尔国能够用来扭转静态的页面.
以这事例我们兴许看起来眼熟,对,smarty手册中有关fetch函数的例证,比竟官方的例证总是很精粹的嘛!
PHP代码
复制代码 代码如下:
include(“Smarty.class.php”);
$smarty = new Smarty;
$smarty->caching = true;
// only do db calls if cache doesn’t exist
if(!$smarty->is_cached(“index.tpl”))
{// dummy up some data
$address = “245 N 50th”;
$db_data = array(“City” => “Lincoln”, “State” => “Nebraska”,
“Zip” => “68502”);
$smarty->assign(“Name”,”Fred”);
$smarty->assign(“Address”,$address);
$smarty->assign($db_data);
}// capture the output
$output = $smarty->fetch(“index.tpl”);
//那个地方算是关键// do something with $output here
echo $output; //hoho 见到output的结果了吧
然后呢?fwrite一下,我们就获得大家所要的结果了。
$fp = fopen(“archives/2005/05/19/0001.html”, “w”);
fwrite($fp, $content);
fclose($fp);
?>

PHP代码
复制代码 代码如下:
ob_start();
echo “Hello World!”;
$content = ob_get_contents(卡塔尔;//获得php页面输出的全体内容
$fp = fopen(“archives/2005/05/19/0001.html”, “w”);
fwrite($fp, $content);
fclose($fp);
?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注