Skip to content

Instantly share code, notes, and snippets.

@infacq
Forked from manastungare/css-compress.php
Created January 24, 2014 08:06
Show Gist options
  • Save infacq/8593743 to your computer and use it in GitHub Desktop.
Save infacq/8593743 to your computer and use it in GitHub Desktop.

Revisions

  1. @manastungare manastungare created this gist May 7, 2012.
    56 changes: 56 additions & 0 deletions css-compress.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,56 @@
    <?php
    /**
    * On-the-fly CSS Compression
    * Copyright (c) 2009 and onwards, Manas Tungare.
    * Creative Commons Attribution, Share-Alike.
    *
    * In order to minimize the number and size of HTTP requests for CSS content,
    * this script combines multiple CSS files into a single file and compresses
    * it on-the-fly.
    *
    * To use this in your HTML, link to it in the usual way:
    * <link rel="stylesheet" type="text/css" media="screen, print, projection" href="/css/compressed.css.php" />
    */

    /* Add your CSS files to this array (THESE ARE ONLY EXAMPLES) */
    $cssFiles = array(
    "ads.css",
    "formatting.css",
    "pagesections.css",
    "print.css",
    "screen.css",
    "sidebar.css"
    );

    /**
    * Ideally, you wouldn't need to change any code beyond this point.
    */
    $buffer = "";
    foreach ($cssFiles as $cssFile) {
    $buffer .= file_get_contents($cssFile);
    }

    // Remove comments
    $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);

    // Remove space after colons
    $buffer = str_replace(': ', ':', $buffer);

    // Remove whitespace
    $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);

    // Enable GZip encoding.
    ob_start("ob_gzhandler");

    // Enable caching
    header('Cache-Control: public');

    // Expire in one day
    header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT');

    // Set the correct MIME type, because Apache won't set it for us
    header("Content-type: text/css");

    // Write everything out
    echo($buffer);
    ?>