↩️ Назад

Категории

poll.php — RSS-лента блога

24.04.2026 | коды из категории: php

🔐 ЗАЩИТА:
- 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>



Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку

Посетителей сегодня: 0
о блоге | карта блога | 📡 Подписаться на RSS

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA