codeigniter ajax中的gzip压缩不起作用

时间:2016-05-10 13:23:53

标签: javascript php ajax codeigniter

顺便说一下,我正在使用codeigniter 3.0.1并且我启用它正常工作的钩子,但它停止了所有ajax调用方法。我用于启用gzip压缩的代码:

$config['enable_hooks'] = TRUE;

system/application/config/hooks.php

// compress output
$hook['display_override'][] = array(
    'class' => '',
    'function' => 'compress',
    'filename' => 'compress.php',
    'filepath' => 'hooks'
    );
system/application/hooks/compress.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

function compress()
{
    $CI =& get_instance();
    $buffer = $CI->output->get_output();

     $search = array(
        '/\n/',         // replace end of line by a space
        '/\>[^\S ]+/s',     // strip whitespaces after tags, except space
        '/[^\S ]+\</s',     // strip whitespaces before tags, except space
        '/(\s)+/s'      // shorten multiple whitespace sequences
      );

     $replace = array(
        ' ',
        '>',
        '<',
        '\\1'
      );

    $buffer = preg_replace($search, $replace, $buffer);

    $CI->output->set_output($buffer);
    $CI->output->_display();
}

1 个答案:

答案 0 :(得分:0)

function compress()
{
ini_set("pcre.recursion_limit", "16777");
$CI =& get_instance();
$buffer = $CI->output->get_output();

$re = '%# Collapse whitespace everywhere but in blacklisted elements.
(?> # Match all whitespans other than single space.
[^S ]s* # Either one [trnfv] and zero or more ws,
| s{2,} # or two or more consecutive-any-whitespace.
) # Note: The remaining regex consumes no text at all...
(?= # Ensure we are not in a blacklist tag.
[^<]*+ # Either zero or more non-"<" {normal*}
(?: # Begin {(special normal*)*} construct
< # or a < starting a non-blacklist tag.
(?!/?(?:textarea|pre|script)b)
[^<]*+ # more non-"<" {normal*}
)*+ # Finish "unrolling-the-loop"
(?: # Begin alternation group.
textarea|pre|script)b
| z # or end of file.
) # End alternation group.
) # If we made it here, we are not in a blacklist tag.
%Six';

$new_buffer = preg_replace($re, " ", $buffer);

// We are going to check if processing has working
if ($new_buffer === null)
{
$new_buffer = $buffer;
}

$CI->output->set_output($new_buffer);
$CI->output->_display();
}