<?
///////////////КОМПРЕССИЯ СТРАНИЦ///////////////
$step_gzip = 2;
if($step_gzip > 0 && $step_gzip <= 9)
{
   $step = $step_gzip;
   if($_SERVER['HTTP_ACCEPT_ENCODING'])//Узнаем какие типы сжатия поддерживает браузер
   { $compress = strtolower($_SERVER['HTTP_ACCEPT_ENCODING']); }else{ $compress = strtolower($_SERVER['HTTP_TE']); }
}else{ $compress = "fgjdfgfg"; }
// Если поддерживается deflate
if(substr_count($compress,'deflate'))
{
   function compress_output_deflate($output)
   {
      global $step;
      return gzdeflate($output, $step);
   }
   
   $method = 'deflate';
   header('Content-Encoding: deflate');
   ob_start('compress_output_deflate');
   ob_implicit_flush(0);
}
// Если поддерживается gzip
elseif(substr_count($compress,'gzip'))
{
   function compress_output_gzip($output)
   {
      global $step;
      return gzencode($output, $step);
   }
   
   $method = 'gzip';
   header('Content-Encoding: gzip');
   ob_start('compress_output_gzip');
   ob_implicit_flush(0);
}
// Если поддерживается x-gzip
elseif(substr_count($compress,'x-gzip'))
{
   function compress_output_x_gzip($output)
   {
      global $step;
      $size = strlen($output);
      $crc = crc32($output);
      $output = gzcompress($output, $step);
      $output = substr($output, 0, strlen($output) - 4);
      return "\x1f\x8b\x08\x00\x00\x00\x00\x00".$output.pack('V',$crc).pack('V',$size);
   }
   
   $method = 'x-gzip';
   header('Content-Encoding: x-gzip');
   ob_start('compress_output_x_gzip');
   ob_implicit_flush(0);
}




//Функция для вывода инфы о проценте сжатия и др.
function info_compress()
{
   global $method, $step;
   
   $contents = ob_get_contents();
   // Сколько весит исходная страница
   $in = strlen($contents);
   
   switch($method)
   {
      default:
      echo'';//Сжатие не поддерживается<br>
      break;
      
      case 'deflate':
      $out = strlen(gzdeflate($contents, $step));
      
      echo ' '.round(100-(100/($in/$out)),1).' %';
      break;
      
      case 'gzip':
      $out = strlen(gzencode($contents, $step));
      
      echo ' '.round(100-(100/($in/$out)),1).' %';
      break;
      
      case 'x-gzip':
      $out = strlen(gzcompress($contents, $step));
      
      echo ' '.round(100-(100/($in/$out)),1).' %';
      break;
   }
   
   return;
}


?>