camokat

Рейтинг
13
Регистрация
06.04.2009

Вот, дописал с запросом погоды раз в 2 часа с сервера, остальное время берется из кеша. Работать будет намного быстрее.


<?include ($_SERVER['DOCUMENT_ROOT'].'/1.html');?> (подключается шапка сайта)

Погода:
<table width="80%" cellpadding=3 cellspacing=1 border=0>
<tr bgcolor=#779288>

<?php
$url = 'http://sait.ru/pogoda.html';
$beginBlock = '<tr bgcolor=#779288>';
$endBlock = '</tr></table>';

$cachefile = dirname(__FILE__).'/cache/weather.php'; // файл кеша
$cache_time_config=7200; //время актуальности кеша 2 часа
//Проверяем наличие кеша
if(file_exists($cachefile)){
$cachetime = filemtime($cachefile); // время создание кеша
if ((time() - $cachetime) < $cache_time_config) { //если кеш не устарел - берем значение из него
$cache_used=true;
include $cachefile;
}
}

if(!$cache_used) // если не использовали кеш - заправшиваем страницу с сервера погоды
{
$pattern = '%' . $beginBlock . '(.*)' . $endBlock . '%isU';

$fp = @fopen($url, 'r');
if (!$fp) exit();
$data = '';
while(!feof($fp))
{
$data .= fgets($fp, 8192);
}
fclose($fp);
if (!preg_match($pattern, $data, $matches)) // страница не доступна
{
if(file_exists($cachefile)){ // берем из устаревшего кеша данные
include $cachefile;
}
else // кеш отсутствует
{
echo 'Сервер погоды временно недоступен';
}
}
else // сохраняем в кеш новое значение
{

file_put_contents($cachefile,'<?php $matches='.var_export($matches,1).'; ?>');
}
}

echo isset($matches[1]) ? $matches[1] : '';
?>
</tr></table>
<?include ($_SERVER['DOCUMENT_ROOT'].'/2.html');?> (подключается подвал сайта)

Хм, так не бывает. Если файла нет, то кеша не буде. Может Вы что то попутали или посмотрели в папку, когда кеша не было :) Довольно странная ситуация

'b14_3268733_1 ' - после "1" пробел лишний. Нужно ввести имя базы без пробелов в конце и начале

А если заменить это


if (!preg_match($pattern, $data, $matches))
{
exit('dfgd');
}

на это


if (!preg_match($pattern, $data, $matches))
{
if(file_exists(dirname(__FILE__).'/cache/weather.php')){
include dirname(__FILE__).'/cache/weather.php';
}
else
{
echo 'Сервер погоды временно недоступен';
}
}
else
{
file_put_contents(dirname(__FILE__).'/cache/weather.php','<?php $matches='.var_export($matches,1).'; ?>');
}

и создать в директории со скриптом поддиректорию cache с правами 777, то погода будет кешироваться, и при недоступности сайта погоды, она будет выводиться из кеша.

Кеш так же можно использовать для ускорения работы скрипта, тоесть грузить удаленную страницу не для каждого посетителя, а, например, раз в 15 минут. Все остальные зарпосы же брать из локального кеша.

1 23
Всего: 24