CSS tömörítés

Mi másra lehetne alkalmas egy ilyen verőfényes vasárnap délután, mint a CSS-ek betömörítésére. Ebből az alkalomból összedrótoztam egy kis PHP scriptet, amit ideális esetben mindig akkor fogunk lefuttatni, amikor a dev környezetből kipakoljuk a művet élesbe.

<?php

$tplDir = '/var/www/site/';

// definiáljuk a css-eket
$fileArr = array(
	'scripts/validation/validation.css',
	'scripts/scriptaculous/autocomplete.css',
	'templates/common.css',
	'templates/content/module.css',
	'templates/pages/module.css',
);

foreach($fileArr AS $file) {

	// ez lesz az új fájlok kiterjesztése
	$compressedFile = str_replace('.css', '.compressed.css', $file);

	$bc = $env->getFileContent($tplDir.$file); // kiszedjük a $bc változóba a css-ek tartalmát (fopen, curl, akármi...)

	if($bc) {
		$bc = preg_replace('!/\\*[^*]*\\*+([^/][^*]*\\*+)*/!', '', $bc);
		$bc = preg_replace('![\\n\\r\\t]!', "", $bc);
		$bc = preg_replace('! *([\\{\\};,:]) *!', "$1", $bc);
		$bc = preg_replace('!\\}!', "}\\n", $bc);

		// sortörések + import css-ek fájlneveinek cserélése
		$bc = str_replace(array("\\r\\n", "\\r", "\\n", ".css"), array('', '', '', '.compressed.css'), $bc);

		touch($tplDir.$compressedFile);
		$f = fopen($tplDir.$compressedFile, "w");
		fwrite($f, $bc);
		fclose($f);
	}

}

?>

Beolvassa egyenként a fájlok tartalmát, szépen kiszedi a felesleges szóközöket, sortöréseket, meg minden egyebet, majd az így létrejött új fájlok kapnak egy .compressed.css kiterjesztést - ezekre hivatkozunk az éles site HTML kódjában, az eredetiek pedig megmaradnak a fejlesztéshez.

Házi feladat: ugyanezt JavaScriptre.

1 hozzászólás

  1. Robika, 2008. május 4., 9:50

    én a Minify -t használom erre ( http://code.google.com/p/minify/ ), egy redirect viszi rá a .js és .css fájlokat, megnézi, hogy módosult-e a saját cache-éhez képest, és ha igen, akkor újra összecsomagolja… ügyes cucc ez is, bár tény, hogy kicsit több sor a kódja (bár a caching miatt mindegy). Csak php5 alatt megy (legalábbis ezt állítja magáról, nem próbáltam ki…)

     

Új hozzászólás: