PHP - сжать статический CSS-файл с помощью GZIP - PullRequest
3 голосов
/ 23 сентября 2010

поэтому у меня есть файл CSS, style.css. в той же директории у меня есть каталог images /. Как я могу сделать скрипт, который сжимает style.css, но из другой папки?

Прямо сейчас у меня есть это:

<?php
  if(isset($_GET['css'])) $file = array('url' => htmlspecialchars($_GET['css']), 'type' => 'text/css');
  if(isset($_GET['js'])) $file = array('url' => htmlspecialchars($_GET['js']), 'type' => 'application/javascript');
  if(!isset($file)) exit();

  header('Content-type: '.$file['type']);
  header('Cache-Control: max-age='.(60*60*6).', must-revalidate');  

  // whitespace+comment removal, in case gzip is off
  function compress($buffer){
    global $file;
    $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
    $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), ' ', $buffer);
    return $buffer;
  }

  if(extension_loaded('zlib'))
    if(substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler");

  else ob_start("compress");

  include($file['url']);    
  ob_end_flush();
?>

и используйте что-то вроде этого:

<style type="text/css">
 @import "http://mysite.com/lib/c.php?css=../style.css";
</style>

все в порядке, за исключением того, что путь к изображениям внутри файла css больше не работает. я думаю это потому что (images / bg.jpg) становится (../images/bg.jpg)

можно ли это исправить, не перемещая скрипт c.php в тот же каталог, что и таблица стилей?

1 Ответ

3 голосов
/ 23 сентября 2010

Если ваш веб-сервер имеет такую ​​функцию, вы можете использовать переписывание URL, чтобы сохранить порядок.

Пример с mod_rewrite:

RewriteRule ^images/style\.css$ lib/c.php?css=../style.css

Тогда вы можете просто:

@import "http://mysite.com/images/style.css";

Я также рекомендую вам еще раз взглянуть на ваш сценарий. Что произойдет, если я загружу этот URL?

http://mysite.com/lib/c.php?css=.htpasswd
...