PHPからのRSS出力について
お世話になります。PHP初級です。
MySQLからデータを取得し、RSS(xml)出力したいと思い、何とか形になってきましたが、表示で問題が発生してしまいました。
データは30件程度入力してあります。
・IE7 そのまま開くと一応正常(?)に表示。ただしブックマークすると
最初の1件しか記事が表示されない
・Firefox ブックマークは出来るが、記事の各タイトルが表示されない
・goo RSSリーダー 最初の1件しか記事が表示されない
以下ソースです。
<?php
header ("Content-Type: application/xml; charset=euc-jp");
echo "<?xml version=\"1.0\" encoding=\"EUC-JP\"?>" . "\n";
echo "<rss version=\"2.0\">" . "\n";
echo "<channel>" . "\n";
echo "<title >タイトル RSS</title>" . "\n";
echo "<link>http://www.yahoo.co.jp</link>" . "\n";
echo "<description>RSS</description>" . "\n";
echo "<language>ja</language>" . "\n";
echo "<copyright>C</copyright>" . "\n";
echo "<managingEditor></managingEditor>" . "\n";
echo "<webMaster>000@0000.com</webMaster>" . "\n";
echo "<pubDate>" . "2009-02-26T00:00:00+0900" . "</pubDate>" . "\n";
echo "<lastBuildDate></lastBuildDate>" . "\n";
// ファイルインクルード
include("設定ファイル");
// データベースへ接続
$conn = mysql_connect($host, $user, $pw) or die("データベース接続エラー");
mysql_select_db($db, $conn);
// SQLを組み立て
$sql = "SELECT * FROM テーブル LIMIT 0, 15";
// 結果セットを取得
$res = mysql_query($sql);
// 取り出したデータを表示する
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
echo "<item>" . "\n";
echo "<title>" . $row["dtitlej"] . "</title>" . "\n";
echo "<link>" . "xxx.xml" . "</link>" . "\n";
echo "<description></description>" . "\n";
echo "<pubDate></pubDate>" . "\n";
echo "</item>" . "\n";
}
echo "</channel>" . "\n";
echo "</rss>";
// 結果セットを破棄
mysql_free_result($res);
// 接続解除
mysql_close($conn);
?>
どこがどう悪いのか、どうしても分からず投稿しました。
何分RSS(xml)も初めてですので、どうかお助けください。
お礼
ほんとありがとうございました。 最初の回答にあったように、Function化しました。 ---------------------------------- <?php define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); require 'rss_fetch.inc'; require 'code_table.ucs2jis'; require 'jcode.php'; function get_value($url){ define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); global $result; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = JcodeConvert($title, 3, 0); foreach ($rss->items as $item ) { $title = $item[title]; $title = JcodeConvert($title, 4, 2); $itemday = date('Y/n/j',strtotime(substr($item['published'],0,10))); $itemday = date('Y/m/d H:i:s',strtotime($item['published'])); $itemday = JcodeConvert($itemday, 4, 2); $url = $item[link]; $str = $title; //広告排除して返す if (strpbrk($str, 'PR: ')) { echo ""; $result = ""; } else { echo "<a href=\"$url\" target=\・・・"; $result = $result."<a href=\"$url\" target=\"_blank\・・・"; } } return $result; } ?> ---------------------------------- そしてhtml側で <?php include file_get_contents("/xxx.php"); echo get_value('xxx.xml'); ?> としたのですが、表示されず・・・ php単体では問題ないのですが・・・ ちなみにですが、$resultに結果を追記させたんですが 全部で11ほどある結果のうち後半7つまでしか入ってません。 サイズってあるんですかね。。 何度もすいません。
補足
たびたびありがとうございます。 >サイトを分けないとダメな事情がおありなんでしょうか。 サイトの一部にrss結果を表示したく html部分がすでに完成しているため、php化できない事情があります。 また、技術的にも・・・ 関数化して・・・を現在試してますが 構文エラーで詰まっています(^^; 別件ですいませんが、 <?php class get_rss{ public $result; function get_value($url){ } return $result; } ?> と別ファイルを作成してみました。 ※先ほどのecho内容を$resultに保持してます。 これを別ファイルからよびたいのですが <?php require('xxx.php'); $url = 'http://xxx.xml'; echo get_rss.get_value($url); ?> ではだめでしょうか? お手数ですが、よろしくお願いします。