Консультация № 143460
09.09.2008, 13:44
30.00 руб.
0 2 0
Уважаемые эксперты,

подскажите, почему не работает лента RSS, что нужно исправить? Вроде бы работала, а теперь - не записываются данные в rss.txt (0777). Файлы rss.php + rssconfig.php в приложении, а также часть файла add.php.

(Может, и ещё что-то не работает, но данные точно не записываются).

Приложение:
<?php
define('DATE_FORMAT_RFC822','r');
header('Content-type: text/xml; charset=windows-1251');

include 'rssconfig.php';

$lastBuildDate = date(DATE_FORMAT_RFC822);


print '<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>'.$rss_title.'</title>
<link>'.$rss_link.'</link>
<description>'.$rss_desc.'</description>
<language>ru</language>
<pubDate>'.$lastBuildDate.'</pubDate>
<lastBuildDate>'.$lastBuildDate.'</lastBuildDate>';

$rss_file = './data/rss.txt';
$rss_array = file($rss_file);

foreach($rss_array as $key => $value) {
$tmp_arr = explode("|",$value);
$count = count($tmp_arr);
// Этот код удаляет все теги BR
for($i = 0; $i < $count; $i++)
{ $tmp_arr[$i] = str_replace('
', '', $tmp_arr[$i]); }
$pubDate = date(DATE_FORMAT_RFC822, $tmp_arr[11]);
print '<item>';
print '<title>'.$tmp_arr[3].'</title>';
print "<description>$tmp_arr[5] (Добавлено $tmp_arr[6])</description>";
print '<link>'.$rss_link.'index.php?fid='.$tmp_arr[8].'&id='.$tmp_arr[10].'</link>';
print '<pubDate>'.$pubDate.'</pubDate>';
print '</item>';
}



print '</channel>
</rss>';

?>

<?php

$rss_title = 'Доска объявлений Кафедры общего языкознания'; // заголовок RSS канала
$rss_link = 'http://www.genling.nw.ru/board/'; // ссылка на сайт, связанный с RSS каналом
$rss_desc = 'Последние новости Кафедры общего языкознания'; // описание RSS канала
?>

add.php:

function createRSS($katnumber,$katname,$name,$zag,$type,$msg,$date,$deldt,$fid,$status,$key,$today,$gorod,$phone,$rname) {
$data_file = './data/rss.txt';

chmod($data_file,0777);

$file_in_array = file($data_file);
$resource = fopen($data_file,"w");

#$deldate=date("d.m.Y",$deldt) //
#$today = date("d.m.Y",$today);
$str_to_record = "$katnumber|$katname|$name|$zag|$type|$msg|$date|$deldt|$fid|$status|$key|$today|$gorod|$phone|$rname\n";

if(count($file_in_array) > 6)
array_pop($file_in_array);

array_unshift($file_in_array,$str_to_record);

foreach($file_in_array as $keys => $value) {
fwrite($resource,$value);
}

fclose($resource);
}

Обсуждение

Неизвестный
09.09.2008, 15:13
общий
Здравствуйте, Anjali!
Давайте рассуждать логически, опираясь на факты и здравый смысл.

Если Вы пытаетесь с помощью функции fopen открыть для записи поток к файлу, а запись не идет, значит, потока нету. Функция fopen с аргументом "w", ставит указатель в начало файла, а все, что стоит после указателя, удаляет. Иными словами, функция стирает содержимое файла или создает его, если он отсутствует. Так? Но она не сможет открыть его для записи, если он занят другим процессом . На локальном хосте это трудно заметить, потому что на локале обычно один пользователь сидит, и процессы не конфликтуют между собой, потому что следуют друг за другом как бы по очереди. Если данные не записываются, а в коде нет зримых ошибок, то проблема только в этом. Как такое может происходить? Допустим, в тот момент времени, когда Вы пытаетесь записать что-то в файл, в него как раз кто-то другой уже записывает, либо читает этот файл

Я бы рекомендовал Вам вскрывать содержимое ленты функциями для работы с XML. Они для этого подходят куда как лучше, чем простые функции для работы с файлами. Потратьте некоторое время на изучение, зато работать с лентой будет легче. Сходите на phpworld.ru, и посмотрите, что там по этому поводу пишут.
С уважением, Товарищ Бородин
Неизвестный
09.09.2008, 15:26
общий
Спасибо за совет!
Форма ответа