🔐 ЗАЩИТА:
- htmlspecialchars() — защита от XSS
- PDO — защита от SQL-инъекций
- Только чтение — никаких изменений в БД
- Лимит 20 записей — защита от перегрузки
- Нет пользовательского ввода — безопасно
⚙️ ФУНКЦИИ:
- Вывод последних 10 статей + 10 код-постов
- Сортировка по дате (новые сверху)
- XML-формат для RSS-читалок
- Автоопределение типа контента (статья/код-пост)
- Иконки 📖 и 💻 в заголовках
📦 ПОДДЕРЖИВАЕТСЯ:
- Feedly, Inoreader, Telegram-боты
- Подкаст-плееры
- Автообнаружение браузерами
<?php
// Опционально: защита от слишком частых запросов
session_start();
if (isset($_SESSION['rss_last_request']) && time() - $_SESSION['rss_last_request'] < 30) {
header('HTTP/1.1 429 Too Many Requests');
die('Слишком частые запросы. Подождите.');
}
$_SESSION['rss_last_request'] = time();
header('Content-Type: application/rss+xml; charset=utf-8');
require __DIR__ . '/includes/db.php';
$domain = 'https://blog.iotprof.ru';
// Получаем 10 последних статей
$articles = $pdo->query("
SELECT id, title, created_at, 'article' as type
FROM articles
ORDER BY created_at DESC
LIMIT 10
")->fetchAll();
// Получаем 10 последних код-постов
$codePosts = $pdo->query("
SELECT id, title, created_at, 'code' as type
FROM code_posts
ORDER BY created_at DESC
LIMIT 10
")->fetchAll();
// Объединяем и сортируем по дате (новые сверху)
$allPosts = array_merge($articles, $codePosts);
usort($allPosts, function($a, $b) {
return strtotime($b['created_at']) - strtotime($a['created_at']);
});
// Берём последние 20 (или сколько есть)
$allPosts = array_slice($allPosts, 0, 20);
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<rss version="2.0">
<channel>
<title>IoTProf Blog — IT и IoT</title>
<link><?= $domain ?></link>
<description>Блог про IoT, IT и программирование. Статьи и примеры кода.</description>
<language>ru</language>
<lastBuildDate><?= date('r') ?></lastBuildDate>
<?php foreach ($allPosts as $post): ?>
<?php
$isCode = ($post['type'] === 'code');
$postLink = $domain . '/' . ($isCode ? 'code_post.php?id=' : 'article.php?id=') . $post['id'];
$typeLabel = $isCode ? '💻 Код-пост' : '📖 Статья';
?>
<item>
<title><?= $typeLabel ?>: <?= htmlspecialchars($post['title']) ?></title>
<link><?= $postLink ?></link>
<guid isPermaLink="true"><?= $postLink ?></guid>
<pubDate><?= date('r', strtotime($post['created_at'])) ?></pubDate>
</item>
<?php endforeach; ?>
</channel>
</rss>
Комментарии
Пока нет комментариев. Будьте первым!