所以我一直在使用Minify來壓縮我的JS和CSS,它們都很好,直到我需要壓縮一些動態的php樣式表。縮小動態php樣式表
我試圖用htaccess的將它誤以爲它是一個CSS文件,但後來我意識到它使用了不會被mod_rewrite的
來實現絕對文件路徑,反正只要我點它在一個PHP文件,它總是返回'400錯誤請求'。除了編寫我自己的壓縮腳本之外,如何解決這個問題的任何想法?
所以我一直在使用Minify來壓縮我的JS和CSS,它們都很好,直到我需要壓縮一些動態的php樣式表。縮小動態php樣式表
我試圖用htaccess的將它誤以爲它是一個CSS文件,但後來我意識到它使用了不會被mod_rewrite的
來實現絕對文件路徑,反正只要我點它在一個PHP文件,它總是返回'400錯誤請求'。除了編寫我自己的壓縮腳本之外,如何解決這個問題的任何想法?
我發現處理縮小和壓縮樣式表的最好方法就是自己動手。看看這個代碼:
<?php
header("Content-Type: text/css");
header("Last-Modified: ".gmdate('D, d M Y H:i:s', filemtime($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']))." GMT");
header("Expires: ".gmdate('D, d M Y H:i:s', (filemtime($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']) + 691200))." GMT");
//This GZIPs the CSS for transmission to the user
//making file size smaller and transfer rate quicker
ob_start("ob_gzhandler");
ob_start("compress");
//Function for compressing the CSS as tightly as possible
function compress($buffer) {
//Remove CSS comments
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
//Remove tabs, spaces, newlines, etc.
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
//Main style
require_once($_SERVER['DOCUMENT_ROOT']."/templates/style/style.css");
//Other style
if($php_variable) {
require_once($_SERVER['DOCUMENT_ROOT']."/templates/style/other.css");
}
ob_end_flush();
ob_end_flush();
?>
這裏有很多事情正在進行,所以讓我解釋一下。
頭
Last-Modified
和Expires
標題(設置稍微超過一週,您可以更改此設置)。縮減大小和GZIP
ob_start
,我們告訴它GZIP文件以及運行自定義功能compress
。compress
發送到瀏覽器時刪除所有CSS註釋和空格。這意味着您可以將所有評論和間隔保持在源文件中,以便於編輯,但只能將最低限度的內容發送到瀏覽器。風格
require
導入樣式表。按照你的意願去做盡可能多的樣式表;他們將全部通過一個HTTP請求交付給用戶。使用新文件
你會在文件中調用,就像你一個正常的CSS文件。
<style type="text/css" src="/path/to/css-script.php"></style>
結論
使用這種方法,你正在做幾件事情真棒。
@import
聲明......這本身就非常棒。雖然上面的compress
函數嚴格用於CSS,所以我會省略它,但您也可以對JavaScript使用相同的方法。
使用此技術在這個高速緩存控制技術相結合,並且你已經建立了自己的真棒CSS/JS處理程序:How to force browser to reload cached CSS/JS files?
什麼是動態的,PHP的樣式? –
所以你想使用一個與平面文件一起工作的工具來壓縮動態創建的東西。這聽起來有點不對..你不可能? :) –
我將這添加爲註釋,因爲它是在黑暗中刺:嘗試製作一個靜態css文件,然後在那裏包括動態的與@import語句,然後縮小靜態。如果它有效,讓我知道我會將它添加爲答案;)順便說一句,我知道你應該避免@import,但嘿。 – picus