首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 動態生成 RSS 2.0 訂閱源完整實現

     編輯:PHP 相關知識

PHP 動態生成 RSS 2.0 訂閱源完整實現

RSS(Really Simple Syndication)讓用戶無需打開網站即可獲取最新內容更新。本文提供一個功能完整、可直接生產使用的 PHP RSS 生成類庫,支援 RSS 0.91 / 1.0 / 2.0 多格式輸出,含緩存、樣式表、CDATA 等特性。

RSS 2.0 基本結構

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>站點標題</title>
    <link>https://www.example.com/</link>
    <description>站點描述</description>
    <item>
      <title>文章標題</title>
      <link>文章鏈接</link>
      <description>文章摘要</description>
    </item>
  </channel>
</rss>

核心類庫架構

  • FeedItem:單條項目(標題、鏈接、描述、作者、分類、GUID、發布時間等)
  • FeedImage:頻道圖片(標題、URL、鏈接、尺寸)
  • FeedCreator:基礎生成器(編碼、樣式表、緩存、文件保存)
  • RSSCreator091 / RSSCreator10 / RSSCreator20:具體格式實現
  • UniversalFeedCreator:統一入口,自動選擇格式
  • FeedDate:日期解析與格式化(RFC822、ISO8601)

使用示例:從數據庫生成 RSS 2.0

<?php
header('Content-Type: text/xml; charset=utf-8');

// 1. 連接數據庫 (示例用舊 mysql_* 函數,實際請用 PDO/MySQLi)
$db = mysql_connect('127.0.0.1', 'root', '123456');
mysql_query("SET NAMES utf8");
mysql_select_db('dbname', $db);
$res = mysql_query('SELECT * FROM article ORDER BY add_time DESC LIMIT 10', $db);

// 2. 創建通用生成器
$rss = new UniversalFeedCreator();
$rss->title = "頁面標題";
$rss->link  = "https://www.example.com/";
$rss->description = "RSS 訂閱描述";

// 3. 遍歷數據添加項目
while ($row = mysql_fetch_assoc($res)) {
    $item = new FeedItem();
    $item->title = $row['subject'];
    $item->link = 'https://www.example.com/article/' . $row['id'];
    $item->description = $row['description'];
    $item->date = $row['add_time']; // 可被 FeedDate 解析
    $rss->addItem($item);
}
mysql_close($db);

// 4. 直接輸出或保存文件
$rss->saveFeed("RSS2.0", "rss.xml"); // 參數:格式、文件名、是否直接輸出
?>

進階特性

緩存機制

// 使用緩存,3600 秒內直接讀取文件不再查庫
$rss->useCached("RSS2.0", "rss.xml", 3600);

自定義額外元素

$rss->additionalElements = array(
    'webMaster' => 'admin@example.com',
    'ttl' => '60'
);
$item->additionalElements = array('author' => '作者名');

HTML 內容安全輸出

FeedItem::descriptionHtmlSyndicated = true 時自動包裹 <![CDATA[ ... ]]>,避免 XML 解析錯誤;否則自動轉義實體並可設定截斷長度 descriptionTruncSize。

部署建議

  1. 將類庫文件放入項目 includes/ 或通過 Composer 自動載入
  2. 創建獨立腳本 rss.php 並配置 Web 服務器重寫規則(如 /feed → /rss.php)
  3. 在頁面 <head> 添加自動發現鏈接:
    <link rel="alternate" type="application/rss+xml" title="站點 RSS" href="/feed" />
  4. 定期檢查生成的 XML 合法性(W3C Feed Validation Service)

擴展方向

  • 支援 Atom 1.0 格式
  • 整合緩存組件(Redis、Memcached)替代文件緩存
  • 添加分類、標簽、媒體附件等擴展模塊
  • 結合後台管理實現動態配置頻道元數據

此類庫代碼緊湊、無外部依賴,適合快速集成到任何 PHP 項目中提供標準化訂閱服務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved