$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"; ?>