php dynamic css compression per script (css kompremierung)

Gepostet am August 12, 2014

Folgend möchte ich kurz eine einfache Möglichkeit zeigen um CSS Files komprimiert ausgeben zu können ohne große Veränderungen am System vornehmen zu müssen.

Dazu erstellt man im Root die folgende Datei:
index.class.getstyles.php

mit folgendem Inhalt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
/**
 * Copyright (c) 2014 and onwards, Marcel Schmidt.
 * 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.
 * 
 * set htacces in style folders
 * 
 */
 define('ROOT_PATH', 'ROOT PFAD ZUM PROJEKT');
 
//checks
if (!isset($_GET['f'])) {
    echo "no file"; exit;
}
preg_match('/(\/.*.css)/',$_GET['f'],$out);
if (!isset($out[1])) {
    echo "no file after"; exit;
}
if (!file_exists(ROOT_PATH.$out[1])) {
    echo "file not found"; exit;
}
 
 //get css
$cssFiles = array(
    ROOT_PATH.$out[1]
);
 
$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 space
$buffer = str_replace(array('{ ',' {',' }','; ',';}'), array('{','{','}',';','}'), $buffer);
 
// Remove whitespace
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $buffer);
 
// Remove Empty Css Linses
preg_match_all("/(.*)({.*})/Us",$buffer,$out);
if (isset($out[1]) && isset($out[2])) {
    foreach($out[2] as $key => $css) {
        if ($css=='{}') {
            $buffer = preg_replace('/'.$out[1][$key].$out[2][$key].'/','',$buffer,1);
        }
    }
}
 
// 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);
?>

Und zusätzlich fügt man im CSS Ordner des Projektes die folgende .htaccess hinzu

1
2
3
4
Options +FollowSymLinks
RewriteEngine on
 
RewriteRule .* /index.class.getstyles.php?f=%{THE_REQUEST} [L]

Leave a Reply

 

Posts of Current Category



Facebook: