<?
function my_cache()
{
	include 'setup.php';
	global $my_cache_no;
	global $saveCookie;
//проверяем включен ли вывод статистики скрипта на страницах
	if ($statistika == "yes") 
	{
		global $cache_start_time;
		$cache_start_time = getmicrotime();
	}
	
	$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
	$my_cache_no = false; //по умолчанию кэширование разрешено
	$dir = realpath(dirname(__FILE__)) . '/cache/'; //директория, где хранятся файлы кэша
	$filepath = $dir . md5($url); //путь к файлу закэшированной страницы

//если в урл-е строка - не кэшировать
	$fh = fopen(realpath(dirname(__FILE__)) . "/ignore_url.php", "r");
	while (! feof($fh))
	{
		$line = trim(fgets($fh));
		if (strpos($url, $line) > 0)
		{
				$my_cache_no = true;
				return false;
				break;
		}		
	}
	fclose($fh);
//сброс всего кэша по вхождению строки в урл
	if (strpos($url, $url_reset_cache) > 0)
	{
		$my_cache_no = true;
		clear_cache_folder();
		return false;
	}

//сброс кэша одной страницы через вхождение в урл
	if (strpos($url, $url_reset_cache_once) > 0)
	{
		$xx1 = strlen ($url);
		$xx2 = 1 + strlen ($url_reset_cache_once);
		$xx = $xx1 - $xx2;
		$url_once_del = md5(substr($url,0,$xx));
		$filename = "$dir$url_once_del";
		if (file_exists($filename))
		{
			unlink($filename);
    	}
		echo "для страницы ";
		echo substr($url,0,$xx);
		echo " кэш должен был сброситься";
	}	
	
//если пользователь авторизован - не кэшировать его
	if (isset($_COOKIE))
		{
			$strCookie = "";
			foreach ($_COOKIE as $k=>$v) {$strCookie.=$k;}
			if (strstr($strCookie, 'wordpress_logged_in'))
			{
				$my_cache_no = true;
				return false;
			}
		}
//работает только с ЧПУ отключает кэширование страниц вида ?id=1&test=wet&id и т.п.
	if ($_SERVER['QUERY_STRING'] and $chpu == "yes")
	{
				$my_cache_no = true;
				return false;
	}
//проверяем надо ли уже очистить весь кэш
	$file_check_time_reset_cache = realpath(dirname(__FILE__)) . '/check/check_time_clear_cache.php';
	if (file_exists($file_check_time_reset_cache))
	{
		if ((date('U')-filemtime($file_check_time_reset_cache))>$time_clear_all_cache)
		{
			unlink($file_check_time_reset_cache);
			$fh = fopen($file_check_time_reset_cache, 'w+');
//// HZ изменить надо .....
			fwrite($fh, $time_clear_all_cache);
			fclose($fh);
			clear_cache_folder();
		}
	}
 
//если страница есть в кэше
	if (file_exists($filepath))
	{
		//выводим содержимое кэша
		$fp = fopen($filepath, 'rb');
		$cache = fread($fp, filesize($filepath));
		//если вывод статистики на страницах сайта включен - обработка с последующим выводом из кэша
		if ($statistika == "yes")
		{
			$memory	 = (!function_exists('memory_get_usage')) ? '' : round(memory_get_usage()/1024/1024, 2) . 'MB';
			$time = substr(getmicrotime() - $cache_start_time, 0, 7) . ' sec';
			$cache = str_replace($paste_statistika, '<p style="text-align: center">'.$test_cache .$memory. '/' .$time. '</p>' . $paste_statistika, $cache);

		}
		echo $cache;
		//Проверяем актуальность страницы в кэше, если кэш страницы устарел - удалим его
		if ((file_exists($filepath)) and ((date('U')-filemtime($filepath))>$period))
		{
			unlink($filepath);
			$my_cache_no = false; 
		}
		
		return true;
		
	}
	ob_start();
//удаляем кукисы перед кэшированием
	if (isset($_COOKIE)) 
	{
		$saveCookie=array();
		$saveCookie=$_COOKIE;
		$_COOKIE=array();
	}
	return false;
}
//добавление страниц в кэш
function add_cache_page($url, $bufer)
{
	$cache_path_file = realpath(dirname(__FILE__)) . '/cache/'.md5($url);
	$fh = fopen($cache_path_file, 'w+');
	fwrite($fh, $bufer);
	fclose($fh);
}
//что делать со страницой после загрузки
function my_cache_end()
{
	global $my_cache_no;
	// только для Wordpress is_404 не кэшировать
	if (!$my_cache_no && !is_404()) add_cache_page("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], ob_get_flush());
	//восстанавливаем кукисы
	global $saveCookie;
	$_COOKIE=$saveCookie;
}
//очистка всего кэша
function clear_cache_folder()
{
	$dir = realpath(dirname(__FILE__)) . '/cache/';
	foreach (glob($dir."*") as $filename)
	{
		if (file_exists($filename))
		{
			unlink($filename);
    	}	
	}
	$files_index = realpath(dirname(__FILE__)) . '/cache/index.html';
	$h = fopen($files_index, 'w+');
	fwrite($h,"<!--private_directory-->");
	fclose($h);
}
//getmicrotime
function getmicrotime() 
{ 
	list($usec, $sec) = explode(" ", microtime()); 
	return ((float)$usec + (float)$sec); 
} 
?>
