2011-07-05 10 views
2

だから、私はいくつかの動的なPHPのスタイルシートを圧縮するのに必要になるまで、すべてがうまく行くされていた私のJSとCSSを圧縮するMinifyを使用してきました。縮小化動的なPHPのスタイルシート

私はそれがCSSファイルであった考えにそれをだますためにhtaccessファイルを使用しようとしたが、私はそれはとにかく私は、PHPファイルでそれを指すたびにmod_rewriteの

によって影響されないであろう絶対ファイルパスを使用して実現し、常に「400 Bad Request」を返します。私自身の圧縮スクリプトを書く以外に、これをどうやって解決するかについてのアイデアはありますか?

+0

動的なPHPのスタイルシートは何ですか? –

+0

したがって、フラットファイルで動作するツールを使用して、動的に作成されたものを圧縮したいとします。それは少し聞こえません..あなたには不可能ですか? :) –

+0

私は暗闇の中で刺すようにこれをコメントとして追加しています。静的なCSSファイルを作成し、その中に@importステートメントを含む動的なものを含めて静的なものを縮小してみてください。それが動作する場合、私は答えとしてそれを追加することを知らせてください;)私はあなたが@importを避けるべきだと知っているが、ねえ。 – picus

答えて

6

私は、スタイルシートを縮小化と圧縮に対処するための最良の方法は、それを自分で行うことです見つけます。このコードをチェックアウト:

<?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(); 
?> 

ここでは多くのことが起こっているので、説明しましょう。 CSSあるとして、ファイルの種類を設定

ヘッダ

  • (週にわたりわずかに設定すると、あなたはこれを変更することができます)キャッシュ制御のためのLast-ModifiedExpiresヘッダを設定します。

縮小化およびGZIP

ob_startを使用して
  • 、我々はこのファイルをgzipだけでなく、カスタム関数compressを実行するためにそれを伝えます。
  • compressは、ブラウザに送信するときにすべてのCSSコメントと空白を削除します。つまり、すべてのコメントを保存して、簡単に編集できるようにソースファイルに好きなように配置することができますが、ブラウザに最小限のものを送るだけです。

スタイルスタイルシートをインポートするrequireを使用し

  • 。必要な数のスタイルシートに対してこれを行います。彼らはすべて、ユーザーに単一のHTTPリクエストで配信されます。
あなたの新しいファイルを使用

あなたはちょうどあなたが通常のCSSファイルと同じようにファイルに呼ぶことにします。この方法を使用

<style type="text/css" src="/path/to/css-script.php"></style> 

結論

、あなたはいくつかの素晴らしい事をやっています。

  • キャッシュの正しいヘッダーを提供し、サイトをすばやく訪問します。
  • すべての内容に余分な空白やコメントが含まれないようにします。
  • ファイルサイズを小さくするために、GZIPを使用してファイルを圧縮します。
  • すべてのスタイルシートを1つのHTTPリクエストに組み込み、最適化に最適です。
  • @importステートメントを使用しない...それ自体は素晴らしいです。
  • 複数のスタイルシートを保持し、PHPロジックを使用してそれらをインクルードするか含めないかを指定できます。
  • ソーススタイルシートを間隔を置いて配置し、コメントを付けて訪問者に影響を与えないようにすることができます。

上記のcompress機能は厳密にCSSのためのものですが、この同じ方法をJavaScriptにも使用できますので、私は省略します。

は、このキャッシュ制御技術との組み合わせで、この技術を使用し、そしてあなた自身に素晴らしいCSS/JSハンドラを構築しました:How to force browser to reload cached CSS/JS files?

+1

私はこれをちょっと自分自身に適応させる必要があります。 MinifyはCSSではとても遅いです。 – timw4mail

+0

ハハ完璧な答え、素敵な1つのチャプ:)私は素晴らしい言葉の過度の使用のためのボーナスポイントを与えることができます:P – Horse

+0

ちょうど、gzipサポートの不足のためにサファリで動作しません – Horse

関連する問題