1<?php 2 3/** 4 * Inline Runtime Methods render, setSourceByUid, setupSubTemplate 5 * 6 * @package Smarty 7 * @subpackage PluginsInternal 8 * @author Uwe Tews 9 **/ 10class Smarty_Internal_Runtime_CacheModify 11{ 12 /** 13 * check client side cache 14 * 15 * @param \Smarty_Template_Cached $cached 16 * @param \Smarty_Internal_Template $_template 17 * @param string $content 18 * 19 * @throws \Exception 20 * @throws \SmartyException 21 */ 22 public function cacheModifiedCheck(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content) 23 { 24 $_isCached = $_template->isCached() && !$_template->compiled->has_nocache_code; 25 $_last_modified_date = 26 @substr($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ], 0, strpos($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ], 'GMT') + 3); 27 if ($_isCached && $cached->timestamp <= strtotime($_last_modified_date)) { 28 switch (PHP_SAPI) { 29 case 'cgi': // php-cgi < 5.3 30 case 'cgi-fcgi': // php-cgi >= 5.3 31 case 'fpm-fcgi': // php-fpm >= 5.3.3 32 header('Status: 304 Not Modified'); 33 break; 34 case 'cli': 35 if (/* ^phpunit */ 36 !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */ 37 ) { 38 $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified'; 39 } 40 break; 41 default: 42 if (/* ^phpunit */ 43 !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */ 44 ) { 45 $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = '304 Not Modified'; 46 } else { 47 header($_SERVER[ 'SERVER_PROTOCOL' ] . ' 304 Not Modified'); 48 } 49 break; 50 } 51 } else { 52 switch (PHP_SAPI) { 53 case 'cli': 54 if (/* ^phpunit */ 55 !empty($_SERVER[ 'SMARTY_PHPUNIT_DISABLE_HEADERS' ]) /* phpunit$ */ 56 ) { 57 $_SERVER[ 'SMARTY_PHPUNIT_HEADERS' ][] = 58 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT'; 59 } 60 break; 61 default: 62 header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT'); 63 break; 64 } 65 echo $content; 66 } 67 } 68} 69