PHPの勉強に「10 Life-Saving PHP Snippets」で紹介されているコードを読んでみる。
■Compress multiple CSS files(複数CSSファイルの圧縮)
ソースコードは次のようなもの。
header('Content-type: text/css');
ob_start("compress");
function compress($buffer) {
/* remove comments */
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
/* remove tabs, spaces, newlines, etc. */
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
/* your css files */
include('master.css');
include('typography.css');
include('grid.css');
include('print.css');
include('handheld.css');
ob_end_flush();
複数のCSSファイルを一つにまとめ、改行コードや連続する空白文字などを削除して出力する。
■解説
ob_start("compress");
ob_start関数は出力のバッファリングを有効にする。
最初の引数は、バッファを出力する時に呼ばれる関数。
この関数は出力バッファの内容を引数として受け取り、出力結果を返す。
function compress($buffer) {
/* remove comments */
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
/* remove tabs, spaces, newlines, etc. */
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
compress関数はバッファを出力する時に呼び出される。
この関数は、CSSのコメントと改行コードやタブ文字、連続する空白文字を削除している。
/* your css files */
include('master.css');
include('typography.css');
include('grid.css');
include('print.css');
include('handheld.css');
include()は指定されたファイルを読み込み、評価する。
ここではCSSファイルを読み込み、CSSファイルの内容を出力バッファに入れている。
ob_end_flush();
ob_end_flush()は出力用バッファを送信する。
include()でファイルを読み込みob_start()のコールバック関数で処理を行って出力するという方法は、CSSファイルの圧縮以外の用途にも使えるかもしれない。