encode() public méthode

If the encode method is '' (none) or compression level is 0, or the 'zlib' extension isn't loaded, we return false. Then the appropriate gz_* function is called to compress the content. If this fails, false is returned. The header "Vary: Accept-Encoding" is added. If encoding is successful, the Content-Length header is updated, and Content-Encoding is also added.
public encode ( integer $compressionLevel = null ) : boolean
$compressionLevel integer given to zlib functions. If not given, the class default will be used.
Résultat boolean success true if the content was actually compressed
Exemple #1
0
 /**
  * Gzip (encode) the HTTP response and write to output.
  * @param string $strBody        The content that should be in the response.
  * @param string $strContentType The MIME type of the content.
  */
 public static function send($strBody, $strContentType = "text/html")
 {
     $objEncoder = new \HTTP_Encoder(array("content" => $strBody, "type" => $strContentType));
     $objEncoder->encode();
     $objEncoder->sendAll();
     exit;
 }
Exemple #2
0
 public static function render($arrFilter)
 {
     $dtLastModified = 0;
     //*** Load sources from sources directory.
     if (is_dir($GLOBALS["_PATHS"]['css'])) {
         //*** Directory exists.
         foreach ($arrFilter as $strFilter) {
             $strFile = $GLOBALS["_PATHS"]['css'] . "{$strFilter}.css";
             $dtLastModified = self::getLastModified($strFile, $dtLastModified);
             //*** Auto check custom files.
             if (strpos($strFilter, "-custom") === false) {
                 $strFile = $GLOBALS["_PATHS"]['css'] . "{$strFilter}-custom.css";
                 $dtLastModified = self::getLastModified($strFile, $dtLastModified);
             }
         }
     }
     //*** Check if we can send a "Not Modified" header.
     \HTTP_ConditionalGet::check($dtLastModified, true, array("maxAge" => 1200000));
     //*** Modified. Get contents.
     $strOutput = self::minify($arrFilter);
     //*** Gzip the CSS.
     $objEncoder = new \HTTP_Encoder(array("content" => $strOutput, "type" => "text/css"));
     $objEncoder->encode();
     $objEncoder->sendAll();
 }
Exemple #3
0
 public static function render($arrFilter)
 {
     $dtLastModified = 0;
     //*** Load sources from sources directory.
     if (is_dir($GLOBALS["_PATHS"]['js'])) {
         //*** Directory exists.
         foreach ($arrFilter as $strFilter) {
             $strFile = $GLOBALS["_PATHS"]['js'] . $strFilter . ".js";
             if (is_file($strFile)) {
                 $lngLastModified = filemtime($strFile);
                 if (empty($dtLastModified) || $lngLastModified > $dtLastModified) {
                     $dtLastModified = $lngLastModified;
                 }
             }
         }
     }
     //*** Check if we can send a "Not Modified" header.
     \HTTP_ConditionalGet::check($dtLastModified, true, array("maxAge" => 1200000));
     //*** Modified. Get contents.
     $strOutput = self::minify($arrFilter);
     //*** Gzip the Javascript.
     $objEncoder = new \HTTP_Encoder(array("content" => $strOutput, "type" => "text/javascript"));
     $objEncoder->encode();
     $objEncoder->sendAll();
 }
function test_HTTP_Encoder()
{
    global $thisDir;
    HTTP_Encoder::$encodeToIe6 = true;
    $methodTests = array(array('ua' => 'Any browser', 'ae' => 'compress, x-gzip', 'exp' => array('gzip', 'x-gzip'), 'desc' => 'recognize "x-gzip" as gzip'), array('ua' => 'Any browser', 'ae' => 'compress, x-gzip;q=0.5', 'exp' => array('gzip', 'x-gzip'), 'desc' => 'gzip w/ non-zero q'), array('ua' => 'Any browser', 'ae' => 'compress, x-gzip;q=0', 'exp' => array('compress', 'compress'), 'desc' => 'gzip w/ zero q'), array('ua' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', 'ae' => 'gzip, deflate', 'exp' => array('', ''), 'desc' => 'IE6 w/o "enhanced security"'), array('ua' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)', 'ae' => 'gzip, deflate', 'exp' => array('deflate', 'deflate'), 'desc' => 'IE6 w/ "enhanced security"'), array('ua' => 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.01)', 'ae' => 'gzip, deflate', 'exp' => array('', ''), 'desc' => 'IE5.5'), array('ua' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.25', 'ae' => 'gzip,deflate', 'exp' => array('deflate', 'deflate'), 'desc' => 'Opera identifying as IE6'));
    foreach ($methodTests as $test) {
        $_SERVER['HTTP_USER_AGENT'] = $test['ua'];
        $_SERVER['HTTP_ACCEPT_ENCODING'] = $test['ae'];
        $exp = $test['exp'];
        $ret = HTTP_Encoder::getAcceptedEncoding();
        $passed = assertTrue($exp == $ret, 'HTTP_Encoder : ' . $test['desc']);
        if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) {
            echo "\n--- AE | UA = {$test['ae']} | {$test['ua']}\n";
            echo "Expected = " . preg_replace('/\\s+/', ' ', var_export($exp, 1)) . "\n";
            echo "Returned = " . preg_replace('/\\s+/', ' ', var_export($ret, 1)) . "\n\n";
        }
    }
    HTTP_Encoder::$encodeToIe6 = false;
    $methodTests = array(array('ua' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)', 'ae' => 'gzip, deflate', 'exp' => array('', ''), 'desc' => 'IE6 w/ "enhanced security"'));
    foreach ($methodTests as $test) {
        $_SERVER['HTTP_USER_AGENT'] = $test['ua'];
        $_SERVER['HTTP_ACCEPT_ENCODING'] = $test['ae'];
        $exp = $test['exp'];
        $ret = HTTP_Encoder::getAcceptedEncoding();
        $passed = assertTrue($exp == $ret, 'HTTP_Encoder : ' . $test['desc']);
        if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) {
            echo "\n--- AE | UA = {$test['ae']} | {$test['ua']}\n";
            echo "Expected = " . preg_replace('/\\s+/', ' ', var_export($exp, 1)) . "\n";
            echo "Returned = " . preg_replace('/\\s+/', ' ', var_export($ret, 1)) . "\n\n";
        }
    }
    if (!function_exists('gzdeflate')) {
        echo "!WARN: HTTP_Encoder : Zlib support is not present in PHP. Encoding cannot be performed/tested.\n";
        return;
    }
    // test compression of varied content (HTML,JS, & CSS)
    $variedContent = file_get_contents($thisDir . '/_test_files/html/before.html') . file_get_contents($thisDir . '/_test_files/css/subsilver.css') . file_get_contents($thisDir . '/_test_files/js/jquery-1.2.3.js');
    $variedLength = strlen($variedContent);
    $encodingTests = array(array('method' => 'deflate', 'inv' => 'gzinflate', 'exp' => 32157), array('method' => 'gzip', 'inv' => '_gzdecode', 'exp' => 32175), array('method' => 'compress', 'inv' => 'gzuncompress', 'exp' => 32211));
    foreach ($encodingTests as $test) {
        $e = new HTTP_Encoder(array('content' => $variedContent, 'method' => $test['method']));
        $e->encode(9);
        $ret = strlen($e->getContent());
        // test uncompression
        $roundTrip = @call_user_func($test['inv'], $e->getContent());
        $desc = "HTTP_Encoder : {$test['method']} : uncompress possible";
        $passed = assertTrue($variedContent == $roundTrip, $desc);
        // test expected compressed size
        $desc = "HTTP_Encoder : {$test['method']} : compressed to " . sprintf('%4.2f%% of original', $ret / $variedLength * 100);
        $passed = assertTrue(abs($ret - $test['exp']) < 100, $desc);
        if (__FILE__ === realpath($_SERVER['SCRIPT_FILENAME'])) {
            echo "\n--- {$test['method']}: expected bytes: ", "{$test['exp']}. Returned: {$ret} ", "(off by " . abs($ret - $test['exp']) . " bytes)\n\n";
        }
    }
}
Exemple #5
0
 /**
  * Encode and send appropriate headers and content
  *
  * This is a convenience method for common use of the class
  * 
  * @param string $content
  * 
  * @param int $compressionLevel given to zlib functions. If not given, the
  * class default will be used.
  * 
  * @return bool success true if the content was actually compressed
  */
 public static function output($content, $compressionLevel = null)
 {
     if (null === $compressionLevel) {
         $compressionLevel = self::$compressionLevel;
     }
     $he = new HTTP_Encoder(array('content' => $content));
     $ret = $he->encode($compressionLevel);
     $he->sendAll();
     return $ret;
 }
Exemple #6
0
<?php

/**
 * AJAX checks for zlib.output_compression
 * 
 * @package Minify
 */
$_oc = ini_get('zlib.output_compression');
// allow access only if builder is enabled
require __DIR__ . '/../config.php';
if (!$min_enableBuilder) {
    header('Location: /');
    exit;
}
if (isset($_GET['hello'])) {
    // echo 'World!'
    // try to prevent double encoding (may not have an effect)
    ini_set('zlib.output_compression', '0');
    require $min_libPath . '/HTTP/Encoder.php';
    HTTP_Encoder::$encodeToIe6 = true;
    // just in case
    $he = new HTTP_Encoder(array('content' => 'World!', 'method' => 'deflate'));
    $he->encode();
    $he->sendAll();
} else {
    // echo status "0" or "1"
    header('Content-Type: text/plain');
    echo (int) $_oc;
}
 /**
  * Echoes the Javascript if not cached.
  *
  * Echoes the javascript with the correct content.
  * Since the content is dinamic, i use the hash function.
  *
  * @param string $javascript
  *
  * @return void
  */
 private function _echo_javascript($javascript)
 {
     $conditional_get = new HTTP_ConditionalGet(array('contentHash' => md5($javascript)));
     $conditional_get->sendHeaders();
     if (!$conditional_get->cacheIsValid) {
         $http_encoder = new HTTP_Encoder(array('content' => $javascript, 'type' => 'text/javascript'));
         $compression_level = null;
         if ($this->_registry->get('model.settings')->get('disable_gzip_compression')) {
             // set the compression level to 0 to disable it.
             $compression_level = 0;
         }
         $http_encoder->encode($compression_level);
         $http_encoder->sendAll();
     }
     Ai1ec_Http_Response_Helper::stop(0);
 }