Я работаю над сайтом с простым сгенерированным php окном твиттера с твитами на временной шкале пользователя, извлеченными из RSS-канала user_timeline и кэшированными в локальный файл для сокращения нагрузки и в качестве резервной копии на случай, если твиттер выйдет из строя.Я основал кеширование на этом: http://snipplr.com/view/8156/twitter-cache/. Казалось, что вчера все работало хорошо, но сегодня я обнаружил, что файл кэша пуст.После удаления и загрузки снова был создан новый файл.
Код, который я использую, приведен ниже.Я отредактировал его, чтобы попытаться заставить его работать с тем, что я уже использовал для отображения канала, и, возможно, испортил что-то решающее.
Я внес следующие изменения (и я твердо верю, что любое изэто может быть причиной): - Пересмотрен код разницы во времени (в связанном примере использовалась пользовательская функция, которая не была включена в код)
Удалена функция «сериализации»от "французов".Это просто потому, что я не мог понять, как десериализовать его после загрузки в код дисплея.По правде говоря, я не понимаю, какую роль играет сериализация или как она работает, поэтому я уверен, что мне следовало бы сохранить ее. Если это так, мне просто нужно понять, где / как десериализовать во второй части кода, такчто он может быть проанализирован.
Удалена переменная $ rss в пользу просто загрузки файла кэша в моем исходном коде отображения твита.
Итак, вот соответствующие части кода, который я использовал:
<?php
$feedURL = "http://twitter.com/statuses/user_timeline/#######.rss";
// START CACHING
$cache_file = dirname(__FILE__).'/cache/twitter_cache.rss';
// Start with the cache
if(file_exists($cache_file)){
$mtime = (strtotime("now") - filemtime($cache_file));
if($mtime > 600) {
$cache_rss = file_get_contents('http://twitter.com/statuses/user_timeline/75168146.rss');
$cache_static = fopen($cache_file, 'wb');
fwrite($cache_static, $cache_rss);
fclose($cache_static);
}
echo "<!-- twitter cache generated ".date('Y-m-d h:i:s', filemtime($cache_file))." -->";
}
else {
$cache_rss = file_get_contents('http://twitter.com/statuses/user_timeline/#######.rss');
$cache_static = fopen($cache_file, 'wb');
fwrite($cache_static, $cache_rss);
fclose($cache_static);
}
//END CACHING
//START DISPLAY
$doc = new DOMDocument();
$doc->load($cache_file);
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
$itemRSS = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
);
array_push($arrFeeds, $itemRSS);
}
// the rest of the formatting and display code....
}
?>
ETA 6/17 Никто не может помочь ...?
Я думаю, что это как-то связано с записью пустого файла кэша поверх хорошего, когда твиттер выключен, потому что иначе я представляю, что это должно происходить каждые десять минут, когда файл кэша перезаписывается снова,но это случается не так часто.
Я сделал следующее изменение в части, где он проверяет, сколько лет файлу, чтобы перезаписать его:
$cache_rss = file_get_contents('http://twitter.com/statuses/user_timeline/75168146.rss');
if($mtime > 600 && $cache_rss != ''){
$cache_static = fopen($cache_file, 'wb');
fwrite($cache_static, $cache_rss);
fclose($cache_static);
}
… так что теперь, это будетЗаписывайте файл только в том случае, если он старше 10 минут и . На странице rss получено реальное содержимое.Как вы думаете, это будет работать?