<?
/*
=====================================================
DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
http://www.pc-soft.ru/
-----------------------------------------------------
Copyright (c) 2004,2005 SoftNews Media Group
=====================================================
Данный код защищен авторскими правами
=====================================================
Файл: gzip.php
-----------------------------------------------------
Назначение: Сжатие gzip
=====================================================
*/
if(!defined('DATALIFEENGINE'))
{
die("Hacking attempt!");
}
function CheckCanGzip(){
if (headers_sent() || connection_aborted()){
return 0;
}
if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) return "x-gzip";
if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) return "gzip";
return 0;
}
/* $level = compression level 0-9, 0=none, 9=max */
function GzipOut($debug=0, $level=3){
global $config_allow_gzip, $Timer, $db, $tpl;
$s = "
<!-- Время выполнения скрипта ".$Timer->stop()." секунд -->
<!-- Время затраченное на компиляцию шаблонов ".round($tpl->template_parse_time, 5)." секунд -->
<!-- Время затраченное на выполнение MySQL запросов: ".round($db->MySQL_time_taken, 5)." секунд-->
<!-- Общее количество MySQL запросов ".$db->query_num." -->";
if ($config_allow_gzip != "yes") {if ($debug) echo $s; ob_end_flush(); return;}
$ENCODING = CheckCanGzip();
if ($ENCODING){
$s .= "\n<!-- Для вывода использовалось сжатие $ENCODING -->\n";
$Contents = ob_get_contents();
ob_end_clean();
if ($debug){
$s .= "<!-- Общий размер файла: ".strlen($Contents)." байт ";
$s .= "После сжатия: ".
strlen(gzcompress($Contents, $level)).
" байт -->";
$Contents .= $s;
}
header("Content-Encoding: $ENCODING");
print "\x1f\x8b\x08\x00\x00\x00\x00\x00";
$Size = strlen($Contents);
$Crc = crc32($Contents);
$Contents = gzcompress($Contents, $level);
$Contents = substr($Contents, 0, strlen($Contents) - 4);
print $Contents;
print pack('V', $Crc);
print pack('V', $Size);
exit;
}else{
ob_end_flush();
exit;
}
}
?>