Hi alle zusammen,
ich bin momentan dabei mich mit der komprimierung von css und js Dateien auseinanderzusetzen. Ich habe bereits ein Skript geschrieben das mir die geforderten Css/Js Dateien lädt, komprimiert und als komprimierte .gz Datei abspeichert. Eingebunden wird das ganze z.B. bei Css als php-datei mit dem skript.
Hier also die einbindung des skripts:
und hier das skript (nich vollständig!):
Funktionen: getBrowser(liefert einfach den aktuellen Browsernamen) und clean_css_code(entfernt kommentare usw.)
Das Problem ist nun das bei dem Codec mit gzip anscheinend nur einmal eine ausgabe erzeugt werden kann. Ich habe es auch schon mit ob_start() versucht, dies klappte aber nicht. Ich möchte vorerst versuchen alle Css-Dateien in einer Datei einzubinden, d.h. also ohne weitere http-Requests. Nicht wundern wegen der for-schleife anstatt einer foreach schleife, ist zu testzwecken. er läuft definitiv die schleife 2 mal!
Ich hoffe ich habe es einigermaßen verständlich erklärt.
Schonmal danke
ich bin momentan dabei mich mit der komprimierung von css und js Dateien auseinanderzusetzen. Ich habe bereits ein Skript geschrieben das mir die geforderten Css/Js Dateien lädt, komprimiert und als komprimierte .gz Datei abspeichert. Eingebunden wird das ganze z.B. bei Css als php-datei mit dem skript.
Hier also die einbindung des skripts:
PHP-Code:
<LINK rel="stylesheet" type="text/css" href="Css/include.css.php">
PHP-Code:
/**
------------------------------------------------------------------------
Header senden:
------------------------------------------------------------------------
*/
header('content-type: text/css; charset: UTF-8');
header('Accept-Encoding: gzip');
header('Vary: Accept-Encoding');
header('Content-Encoding: gzip');
header('Last-Modified: '. gmdate('D, d M Y H:i:s') .' GMT');
header('cache-control: must-revalidate');
/**
------------------------------------------------------------------------
Dateien durchlaufen:
------------------------------------------------------------------------
*/
for ($i = 0; $i < count($aFiles); $i++)
{
$sFile = $aFiles[$i];
$sCssFile = $sFile .'.css';
$sGzFile = 'gz/'. $sFile .'.css.gz';
$sContent = '';
// Pruefen ob Css-Datei existiert
if (file_exists($sCssFile))
{
// Browserspezifisch einbinden?
if (empty($sBrowser) OR $sBrowser == getBrowser())
{
// Komprimierte Datei vorhanden und noch aktuell?
if (file_exists($sGzFile) AND
(filemtime($sGzFile) >= filemtime($sCssFile)))
{
// Komprimierte Datei laden
$sContent = file_get_contents($sGzFile);
}
else
{
// Css Datei laden
$sContent = file_get_contents($sCssFile);
// Manuelle komprimierung
$sContent = clean_css_code($sContent);
// Gzip komprimierung
$sContent = gzencode($sContent, 6);
// In Datei schreiben
file_put_contents($sGzFile, $sContent);
$bNew = false;
}
}
}
// Inhalt ausgeben
echo $sContent;
}
Das Problem ist nun das bei dem Codec mit gzip anscheinend nur einmal eine ausgabe erzeugt werden kann. Ich habe es auch schon mit ob_start() versucht, dies klappte aber nicht. Ich möchte vorerst versuchen alle Css-Dateien in einer Datei einzubinden, d.h. also ohne weitere http-Requests. Nicht wundern wegen der for-schleife anstatt einer foreach schleife, ist zu testzwecken. er läuft definitiv die schleife 2 mal!
Ich hoffe ich habe es einigermaßen verständlich erklärt.
Schonmal danke

Kommentar