$now,
'userAgent' => substr($userAgent, 0, 200), // Limit length
'ip' => $ip,
'firstSeen' => $readers[$readerId]['firstSeen'] ?? $now
];
// Clean up old readers (haven't fetched in 30+ days to keep file size manageable)
$thirtyDaysAgo = $now - (30 * 24 * 60 * 60);
foreach ($readers as $id => $reader) {
if ($reader['lastFetch'] < $thirtyDaysAgo) {
unset($readers[$id]);
}
}
// Save readers data
file_put_contents($readersFile, json_encode($readers, JSON_PRETTY_PRINT));
// Calculate active subscribers (fetched in last 7 days)
$sevenDaysAgo = $now - (7 * 24 * 60 * 60);
$activeSubscribers = 0;
foreach ($readers as $reader) {
if ($reader['lastFetch'] >= $sevenDaysAgo) {
$activeSubscribers++;
}
}
// Update summary - track RSS feed fetch (for historical data)
$summary = [];
if (file_exists($summaryFile)) {
$summary = json_decode(file_get_contents($summaryFile), true) ?: [];
}
if (!isset($summary['rss'])) {
$summary['rss'] = 0;
}
$summary['rss']++;
$summary['activeRssSubscribers'] = $activeSubscribers; // Store active count
// Ensure directory is writable
$result = file_put_contents($summaryFile, json_encode($summary, JSON_PRETTY_PRINT));
if ($result === false) {
error_log("Failed to write RSS tracking to $summaryFile");
}
// Generate and output RSS feed
$postsFile = __DIR__ . '/../data/posts.json';
$posts = [];
if (file_exists($postsFile)) {
$posts = json_decode(file_get_contents($postsFile), true) ?: [];
}
// Sort posts by date (newest first)
usort($posts, function($a, $b) {
return strtotime($b['date']) - strtotime($a['date']);
});
// Escape XML
function escapeXml($str) {
if (!$str) return '';
return htmlspecialchars($str, ENT_XML1, 'UTF-8');
}
// Format content
function formatContent($content) {
return nl2br(htmlspecialchars($content, ENT_XML1, 'UTF-8'));
}
// Generate RSS items
$rssItems = '';
foreach ($posts as $post) {
$title = escapeXml($post['title']);
$excerpt = escapeXml($post['excerpt']);
$content = formatContent($post['content']);
$pubDate = date('r', strtotime($post['date']));
$link = 'https://example.com/blog/post.html?id=' . $post['id'];
$rssItems .= " - \n";
$rssItems .= " {$title}\n";
$rssItems .= " {$link}\n";
$rssItems .= " {$link}\n";
$rssItems .= " {$pubDate}\n";
$rssItems .= "
{$content}]]>\n";
$rssItems .= " \n";
}
// Output RSS XML
echo '' . "\n";
echo '' . "\n";
echo " \n";
echo " My Blog\n";
echo " https://example.com/blog\n";
echo " Blog posts\n";
echo " en-us\n";
echo " " . date('r') . "\n";
echo " \n";
echo $rssItems;
echo " \n";
echo "\n";
?>