Гостевая
Форум
Разделы
Главная страница
Js скрипты
Php скрипты
Html шаблоны
Книги по Web дизайну
Статьи


Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

RSS генератор

Источник: realcoding.net

Что такое RSS? Если коротко, то это формат обмена контентом, базирующийся на XML. Любой интернет-ресурс, содержащий обновляемый или пополняемый контент, может заиметь у себя RSS ленту, и тогда пользователи этого ресурса получат быстрый и удобный способ получить свежие материалы. Кстати, показывать RSS в удобочитаемом виде может та же Opera, а вот IE выдаёт просто отформатированный XML файл.

Итак, задача: написать простой генератор RSS ленты для сайта, содержащего часто пополняемый контент. Решение пишем на PHP. А вы как думали? :) Записи ленты будем хранить в отдельном файле, чтобы было легче выкидывать устаревшие. Кто это предложил «генерировать ленту динамически, выбирая самые свежие записи из MySQL»? Не прокатит, учитывая, что обращаться к базе данных и делать выборку нам придётся каждый раз при просмотре ленты пользователем. В нашем же варианте мы имеем простое кэширование, и регенерация RSS происходит лишь в момент добавления новой записи, причём вообще без обращения к базе.

Схема проста: подгружаем файл с лентой, обрезаем старую запись, если их слишком много, и дописываем новую. Вот кусок кода, пояснения по ходу:

$rss_header_file = rss/header.inc;
$rss_content_file = rss/content.inc;
$rss_footer_file = rss/footer.inc;
$rss_document_file = rss/export.xml;
$rss_temp_file = rss/tempfile;
$rss_miss_lines = 8; // Количество строк в одной записи
$rss_max_records = 10; // Максимальное количество записей в ленте

// Загружаем содержимое
$rss_content = file($rss_content_file);

// Если записей больше чем нужно, выкидываем самую старую
if (count($rss_content) > $rss_miss_lines * $rss_max_records)
 
$rss_content = array_slice($rss_content, $rss_miss_lines);

// Добавляем свежую запись
// В соответствующих переменных должны содержаться данные
// При добавлении/удалении полей поправить $rss_miss_lines
array_push(
 
$rss_content,
 
<item>\n,
 
<title>.$author.</title>\n,
 
<link>.$link.</link>\n,
 
<guid>.$link.</guid>\n,
 
<description>.$message.</description>\n,
 
<pubDate>.date(r).</pubDate>\n,
 
<author>.$author.</author>\n,
 
</item>\n
);
$fp = fopen($rss_content_file, w);
foreach(
$rss_content as $rss_content_line) {
if (
$rss_content_line != \n)
 
fwrite($fp, $rss_content_line);
}
fclose($fp);

// Собираем ленту
$rss_document = array_merge(
 
file($rss_header_file),
 
file($rss_content_file),
 
file($rss_footer_file)
);

// Используем временный файл, чтобы не возникло конфликтов доступа
$rnd = rand(0, 1000);
$rss_temp_file = $rss_temp_file.$rnd;
$fp = fopen($rss_temp_file, w);
foreach(
$rss_document as $rss_document_line)
fwrite($fp, $rss_document_line);
fclose($fp);
unlink($rss_document_file);
rename($rss_temp_file, $rss_document_file);

Все файлы для ленты находятся в папке rss. Полезно также положить туда индексный файл, переадресующий нас на export.xml. В файлах header.inc и footer.inc содержатся, соответственно, заголовок и, хм... завершитель ленты. Можно, конечно, было прописывать их в коде явно, но тогда теряется возможность править их без залезания в код. Да, и не забудьте отформатировать добавляемый текст должным образом, например, с помощью htmlspecialchars(nl2br()).



Похожие статьи:
- register_globals=oN? Вы в опасности!
- Спам — проблема века
- Дядя Гугл — великан
- Делаем выбор: Photoshop 7 или Photoshop CS/CS 2
- Cookies - свежие булочки
- Метатэги
- Использование шаблонов дизайна в ASP.NET
- Прячем счётчики
- Хитрости табличного дизайна. (формируем рамку таблицы)
- Что такое дорвеи? Банят ли за них?
- Использование HTML-таблиц для вывода диаграмм
- И снова отказываемся от модуля CGI?
- Подробно о Robots.txt


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |
[0.001]