[dev] Клиентское кеширование для фотоальбома от Smartor'а
Добавлено: 03.10.2005 23:55
				
				Обратил внимание, что при обновлении страницы с миниатюрами из фотоальбома, они каждый раз грузятся заново. Это не есть хорошо.
Предлагается следующее решение
1. Добавляем полезную функцию ExitWithHeader в файл album_mod/album_functions.php
2. В файле album_thumbnail.php
НАЙТИ
После оного добавить
3. Ну, и на закуску, делаем кэширование больших картинок
Открыть файл album_pic.php
Найти
ПЕРЕД ОНЫМ ДОБАВИТЬ
Как мод оформлять лениво, поскольку тот, кому это нужно идею поймет, а объяснять альтернативно одарённым HTTP протокол нет ни времени ни желания.
			Предлагается следующее решение
1. Добавляем полезную функцию ExitWithHeader в файл album_mod/album_functions.php
Код: Выделить всё
function ExitWithHeader($output,$message='')
{
	global $db, $HTTP_SERVER_VARS;
	$db->sql_close();
	if(function_exists("getallheaders")) header("HTTP/1.1 $output");
	else header('Status: '.$output);
	$code=intval(substr($output,0,3));
	if(($code==200)||($code==304))
	{
	if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'])) header("Last-Modified: ".$HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']);
	if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])) header("Etag: ".$HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']);
	}
	if(!empty($message)) {
		header ('Content-Type: text/plain');
        echo $message;
	}
	exit;
}НАЙТИ
Код: Выделить всё
if( empty($thispic) or !file_exists(ALBUM_UPLOAD_PATH . $pic_filename) )
{
	die($lang['Pic_not_exist']);
}Код: Выделить всё
       $MyETag='"'.md5($thispic['pic_thumbnail'].$thispic['pic_time']).'"';
       $MyGMTtime=gmdate("D, d M Y H:i:s", $thispic['pic_time'])." GMT";
       if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])&& ($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']== $MyETag)) ExitWithHeader('304 Not Modified');
	   else if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']) && ($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'] == $MyGMTtime)) ExitWithHeader('304 Not Modified');
       header("Last-Modified: ".$MyGMTtime);
	   header("Etag: ".$MyETag);Открыть файл album_pic.php
Найти
Код: Выделить всё
	   readfile(ALBUM_UPLOAD_PATH  . $thispic['pic_filename']);
exit;
Код: Выделить всё
      
       $MyETag=filectime(ALBUM_UPLOAD_PATH  . $thispic['pic_filename']);
       $MyGMTtime=gmdate("D, d M Y H:i:s", $MyETag)." GMT";
       $MyETag='"'.$MyETag.'"';
       if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])&& ($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']== $MyETag)) ExitWithHeader('304 Not Modified');
	   if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']) && ($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'] == $MyGMTtime)) ExitWithHeader('304 Not Modified');
       header("Last-Modified: ".$MyGMTtime);
	   header("Etag: ".$MyETag);