Вход Регистрация
Файл: includes/compressor.php
Строк: 65
<?php
#---------------------------------------------#
#      ********* RotorCMS *********           #
#           Author  :  Vantuz                 #
#            Email  :  visavi.net@mail.ru     #
#             Site  :  http://visavi.net      #
#              ICQ  :  36-44-66               #
#            Skype  :  vantuzilla             #
#---------------------------------------------#

/**
 * Класс компрессии страниц
 * Сжимает страницы на лету и выводит результат сжатия в процентах
 * Имеется проверка на установленную библиотеку gzip или включенную директиву zlib.output_compression
 * Также проверяется поддержка сжатия браузером у посетителей
 *
 * @author  Vantuz <visavi.net@mail.ru>
 * @copyright 2005-2013 RotorCMS, http://visavi.net
 * @version 0.1 2013-09-16
 */
class Compressor {

    
/* Установка заголовков и сжатие на лету */
    
public static function start()
    {
        if (
extension_loaded('zlib') &&
            
ini_get('zlib.output_compression') != 'On' &&
            
ini_get('output_handler') != 'ob_gzhandler' &&
            
ini_get('output_handler') != 'zlib.output_compression'
        
)
        {
            
$check_compress self::check_compress();

            if (
$check_compress == 'gzip')
            {
                
header("Content-Encoding: gzip");
                
ob_start(array("Compressor""compress_output_gzip"));
            }
            elseif (
$check_compress == 'deflate')
            {
                
header("Content-Encoding: deflate");
                
ob_start(array("Compressor""compress_output_deflate"));
            }
        }

    }

    
/* Вывод результатов сжатия */
    
public static function result()
    {
        
$check_compress self::check_compress();

        if (
$check_compress)
        {
            
$contents ob_get_contents();
            
$gzip_file strlen($contents);

            if (
$check_compress == 'gzip')
            {
                
$gzip_file_out strlen(self::compress_output_gzip($contents));

            }
            elseif (
$check_compress == 'deflate')
            {
                
$gzip_file_out strlen(self::compress_output_deflate($contents));
            }

            return 
$compression round(100 - (100 / ($gzip_file $gzip_file_out)), 1);

        }
    }

    
/* Проверка поддерживает ли браузер сжатие */
    
protected static function check_compress()
    {
        
// Чтение заголовков
        
if (isset($_SERVER['HTTP_ACCEPT_ENCODING']))
        {
            
$gzencode $_SERVER['HTTP_ACCEPT_ENCODING'];
        }
        elseif (isset(
$_SERVER['HTTP_TE']))
        {
            
$gzencode $_SERVER['HTTP_TE'];
        }
        else
        {
            
$gzencode false;
        }

        
// Поиск поддержки сжатия в заголовках
        
if (strpos($gzencode'gzip') !== false)
        {
            
$support 'gzip';
        }
        elseif (
strpos($gzencode'deflate') !== false)
        {
            
$support 'deflate';
        }
        else
        {
            
$support false;
        }

        return 
$support;
    }

    
/* Сжатие gzencode */
    
public static function compress_output_gzip($output)
    {
        return 
gzencode($output5);
    }

    
/* Сжатие gzdeflate */
    
public static function compress_output_deflate($output)
    {
        return 
gzdeflate($output5);
    }

}
?>
Онлайн: 2
Реклама