Блог

ETag и If-None-Match для простого сайта

Для интернет-магазинов это лучше делать через компоненты, а вот этот функционал использовать только для статических страниц. Для простых сайтов будет достаточно и этого кода.
<?
AddEventHandler("main", "OnEndBufferContent", "OnEndBufferContentHandler");
function OnEndBufferContentHandler($content)
{
   global $APPLICATION, $USER;
   $url = $APPLICATION->GetCurUri();
   if(!substr_count($url,"/bitrix/") && substr_count($content,"") && !$USER->IsAdmin()){
       $hashUrl = hash('md5',$url);
       $sliCont = substr($content,0,strpos($content,"")+7);
       $sliCont = substr($sliCont,strpos($sliCont,""));
       $hashContent = hash('md5',$sliCont);
       $hashArr = ["time" => time(), "hash" => $hashContent];
       if(file_exists($_SERVER["DOCUMENT_ROOT"]."/upload/page_hash/".$hashUrl.".txt")){
           $lastArr = json_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"]."/upload/page_hash/".$hashUrl.".txt"),true);
           if(is_array($lastArr) && $lastArr["hash"] && $lastArr["hash"]==$hashArr["hash"]){
               header("Cache-Control: 86400, must-revalidate");
	       header('Etag: "'.$hashContent.'"'); 
               if(isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $lastArr["hash"]){
                   header('HTTP/1.1 304 Not Modified'); exit();
               }
           }
       }else{
           file_put_contents($_SERVER["DOCUMENT_ROOT"]."/upload/page_hash/".$hashUrl.".txt", json_encode($hashArr));
       }
   }
}
?>

Оставить комментарий



Вам нужен сайт? С чего начать?

Проконсультируем, найдем оптимальное решение, подготовим индивидуальное предложение.