フィードを mySQL データベースにキャッシュするように SimplePie RSS パーサーを構成しようとしていますが、SimplePie ページを読み込もうとすると、次のエラー メッセージが表示され続けます。
- 致命的なエラー: オブジェクト以外でのメンバー関数 set_cache_location() の呼び出し
- 警告: substr() は、パラメータ 1 が文字列であると想定しています。
- 警告: PDO::__construct() は、パラメーター 2 が文字列で、配列が指定されていることを期待しています
「ポート」を「ポート」として設定すると、次のエラー メッセージが表示されます。
警告: mysql:// "IT DISPLAYS MY DB USERNAME AND PASSWORD HERE" は書き込み可能ではありません。正しい相対パスまたは絶対パスを設定していること、およびその場所がサーバー書き込み可能であることを確認してください。/home/...../SimplePie.php の 1357 行目
SimplePie に詳しい人はいますか?
編集
以下のコードでは、明らかに mySQL 設定のユーザー名とパスワードを省略しています。しかし、これらの値を置き換える必要があることを「知っている」ことを認めたかっただけです。また、「3306」をポート番号として使用します。これは、mysql のデフォルトのポート番号であり、ホスト名に「localhost」であると言われているためです。
$feed->set_cache_location('mysql://username:password@localhost:3306/database');
<?php
include('./base.php');
require_once('./php/autoloader.php');
$feed = new SimplePie();
$feed->set_cache_location('mysql://username:password@hostname:3306/database');
$rssurl = $_GET['r'];
$feedlimit = $_GET['limit'];
if (!empty($feedlimit)) {
$feedlimit = $_GET['limit'];
}
else {
$feedlimit = 10;
}
// Set which feed to process.
if (!empty($rssurl)) {
$feed->set_feed_url($rssurl);
}
else
$rss_results = mysql_query("SELECT feed_id, feed_url, feed_title, feed_order, feed_page_id FROM user_feeds WHERE ((feed_owner = '" . $_SESSION['UserId'] . "') AND (feed_page_id = '" . $pageid . "')) ORDER BY feed_order ASC LIMIT 1;");
if ($rss_results) {
while($row = mysql_fetch_array($rss_results))
{
$feed->set_feed_url($row[feed_url]);
}
}
else {
// something went wrong.
echo mysql_error();
}
$feed->enable_cache(true);
// Run SimplePie.
$feed->init();
// This makes sure that the content is sent to the browser as text/html and the UTF-8 character set (since we didn't change it).
$feed->handle_content_type();
// Let's begin our XHTML webpage code. The DOCTYPE is supposed to be the very first thing, so we'll keep it on the same line as the closing-PHP tag.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Feed Page</title>
<script type="text/javascript" src="./js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="./js/jquery-ui-1.7.1.custom.min.js"></script>
<link rel='stylesheet' href='./css/styleb.css' type='text/css' media='all' />
<script type="text/javascript">
// When the document is ready set up our sortable with it's inherant function(s)
$(document).ready(function() {
$("#test-list").sortable({
handle : '.handle',
update : function () {
var order = $('#test-list').sortable('serialize');
$("#info").load("process-sortable.php?"+order);
}
});
});
</script>
</head>
<body>
<div>
<div id="rsscontent">
<ul>
<?php
/*
Here, we'll loop through all of the items in the feed, and $item represents the current item in the loop.
*/
foreach ($feed->get_items(0,$feedlimit) as $item):
$feeditem = $item->get_feed();
?>
<?php if($_GET["view"] === "headlines") {
echo "<li><h2 class='feed_entry_title'><a href='";
echo $item->get_permalink();
echo "'>";
echo $item->get_title();
echo "</a></h2>";
echo "<hr /></li>";
}
elseif ($_GET["view"] === "excerpts") {
echo "<li><h2 class='feed_entry_title'><a href='";
echo $item->get_permalink();
echo "'>";
echo $item->get_title();
echo "</a></h2><div class='feed_entry_content'>";
echo $item->get_description();
echo "</div><hr /></li>";
} else {
echo "<li><h2 class='feed_entry_title'><a href='";
echo $item->get_permalink();
echo "'>";
echo $item->get_title();
echo "</a></h2><div class='feed_entry_content'>";
echo $item->get_content();
echo "</div><hr /></li>";
} ?>
<?php endforeach; ?>
<ul>
</div>
</body>
</html>