php动态生成xml格式的rss文件

当下RSS比较流行,RSS是用XML来书写的,于是想给自己的网站也写一个XML文件。可是每增加一条内容都手动写进XML文件,显然太麻烦,于是就想怎么用PHP文件实现自动生成。

RSS文件格式一般是这样的:

<?xml version=”1.0″ encoding=”utf-8″ ?> #开始标签部分,即后边说到的 temp1.xml;
<rss version=”2.0″>
<title>网页标题</title>
<link>http://www.***.com</link>
<description>有关描述</description>
<channel>

<item> #主体部分,后边说到的temp2.xml;
<title>{title}</title>
<link>{link}</link>
<description>{maintext}</description>
</item>

</channel> #关闭标签部分,后边说到的temp3.xml;
</rss>

我们给以上这段代码起个名字叫temp.xml,PHP生成静态页面的原理是:PHP读取temp.xml模板文件,解析处理后将得出的“结果”再填充回模板(如果想生成HTML静态页面, echo “结果“就可以了),然后用 fopen( ) 函数建立一个新文件rss.xml,用 fwrite( ) 将“结果”写进新文件。

我们还看上边的temp.xml模板文件,在<channel>标签内的<item>项应该有很多,在php程序里这部分我们要写一个循环,你的网站或博客每增加一篇文章就要向rss.xml追加一个<item>项。所以我们需要把temp.xml文件开始、主体、结束三个部分分为三个文件temp1.xml、temp2.xml、temp3.xml在PHP程序里分别加载,否则,每次循环,fwrite()都会将开始标签和结束部分标签也向 rss.xml写一次。而这两部分标签在rss.xml文件里只能出现一次,否则rss.xml文件在浏览器里不能正常执行。下边来看php程序代码test.php:

<?php
$fp = fopen (”temp1.xml”,”r”);
$content = fread ($fp,filesize (”temp1.xml”)); #读入打开文件的内容;
$filename = “test/rss.xml”; #拟将rss.xml文件最后生成在test目录下,test目录要具有写权限;
$handle = fopen ($filename,”w”); #fopen,即打开文件,若文件不存在,则自动创建;
if (!is_writable ($filename)){die (”文件:”.$filename.”不可写,请检查其属性后重试!”);}
if (!fwrite ($handle,$content)){die (”生成文件”.$filename.”失败!”);}

$i=0;
$link= mysql_connect(”localhost”,”username”,”passwd”);
$result= mysql_db_query(”database”,”select * from table order by id desc”);
$k = mysql_num_rows($result);
while( $i<$k )
{
$result= mysql_db_query(”gfs”,”select * from news order by id desc limit $i,1″);
$a = mysql_fetch_array($result);
$b=$a[’id’];
$i++;
$title = $a[’title’];
$link = “http://www.hbgrs.org/news.php?target=’$b’”;
$maintext=$a[’content’];
$fp = fopen (”temp2.xml”,”r”);
$content = fread ($fp,filesize (”temp2.xml”));
$content = str_replace (”{title}”,$title,$content); #替换模板变量中的数据;
$content = str_replace (”{link}”,$link,$content);
$content = str_replace (”{maintext}”,$maintext,$content);
$filename = “test/rss.xml”;
$handle = fopen ($filename,”a”); #注意这里是a,不是w,因为要追加不是覆盖数据。
if (!is_writable ($filename)){die (”文件:”.$filename.”不可写,请检查其属性后重试!”);}
if (!fwrite ($handle,$content)){die (”生成文件”.$filename.”失败!”);}
}

$fp = fopen (”temp3.xml”,”r”);
$content = fread ($fp,filesize (”temp3.xml”));
$filename = “test/rss.xml”;
$handle = fopen ($filename,”a”);
if (!is_writable ($filename)){die (”文件:”.$filename.”不可写,请检查其属性后重试!”);}
if (!fwrite ($handle,$content)){die (”生成文件”.$filename.”失败!”);}
fclose ($handle);
die (”成功!”);
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值