Haikson

[ Everything is possible. Everything takes time. ]

Компрессия CSS с помощью PHP

Столкнулся только что с задачей довольно интересной для меня. Ковыряясь в конфигурации CakePHP, наткнулся я на один интересный момент:

/**
 * Compress CSS output by removing comments, whitespace, repeating tags, etc.
 * This requires a/var/cache directory to be writable by the web server for caching.
 * and /vendors/csspp/csspp.php
 *
 * To use, prefix the CSS link URL with '/ccss/' instead of '/css/' or use HtmlHelper::css().
 */
 //Configure::write('Asset.filter.css', 'css.php');

Т.е. это значит, что должен существовать некоторый класс csspp, который содержит функцию компрессии css файлов путем удаления комментарием и лишних символов типа 'пробелы', 'табуляция' и т.п. Около часа поиска данного чуда человеческой мысли ни к чему не привели. Что же тогда оставалось мне делать? Существует 2 варианта: найти подходящий код и воспользоваться или написать всё самому. я выбрал второй вариант. Код класса csspp с удовольствием выкладываю для общего пользования.

<?php
class csspp {
  function compress($data) {
      /* удаляем комментарии */
      $data = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $data);
      /* удаляем лишние символы */
      $data = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $data);
      return $data;
  }
}

И, естественно, исходник для скачивания