2012-08-06 14 views
8

Attualmente sto cercando di ottenere un metodo di compressione per i miei file CSS. In pratica sto copiando nello stesso modo in cui lo faccio per i miei file JS, ma non funziona. Ho controllato con lo strumento Firebug, ma non è stato caricato alcun CSS.Compressione e memorizzazione nella cache di CSS con PHP

Come posso chiamare lo css.php che chiamerà quindi i file CSS compressi?

codice Lavorare con JS, il file è scripts.php (non ho specificato il .js estensione):

<script type="text/javascript" src="js/scripts.php?build=123&load=foo,bar"></script> 

ho voluto fare lo stesso per i miei file CSS:

<link href="styles/css.php?build=123&load=foo,bar/jquery-ui-1.8rc2.custom" type="text/css"> 

Il css.php dovrebbe fare la compressione:

<?php 
error_reporting(E_ERROR); 
// see http://web.archive.org/web/20071211140719/http://www.w3.org/2005/MWI/BPWG/techs/CachingWithPhp 
// $lastModifiedDate must be a GMT Unix Timestamp 
// You can use gmmktime(...) to get such a timestamp 
// getlastmod() also provides this kind of timestamp for the last 
// modification date of the PHP file itself 

function cacheHeaders($lastModifiedDate) { 
    if ($lastModifiedDate) { 
     if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $lastModifiedDate) { 
      if (php_sapi_name()=='CGI') { 
       Header("Status: 304 Not Modified"); 
      } else { 
       Header("HTTP/1.0 304 Not Modified"); 
      } 
      exit; 
     } else { 
      $gmtDate = gmdate("D, d M Y H:i:s \G\M\T",$lastModifiedDate); 
      header('Last-Modified: '.$gmtDate); 
     } 
    } 
} 

// This function uses a static variable to track the most recent 
// last modification time 
function lastModificationTime($time=0) { 
    static $last_mod ; 
    if (!isset($last_mod) || $time > $last_mod) { 
     $last_mod = $time ; 
    } 
    return $last_mod ; 
} 

lastModificationTime(filemtime(__FILE__)); 
cacheHeaders(lastModificationTime()); 
header("Content-type: text/css; charset: UTF-8"); 

ob_start ("ob_gzhandler"); 

foreach (explode(",", $_GET['load']) as $value) { 
    if (is_file("$value.css")) { 
     $real_path = mb_strtolower(realpath("$value.css")); 
     if (strpos($real_path, mb_strtolower(dirname(__FILE__))) !== false ||strpos($real_path, mb_strtolower(dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR)) !== false) { 
      lastModificationTime(filemtime("$value.css")); 
      include("$value.css"); echo "\n"; 
     } 
    } 
} 
?> 

risposta

3

Manca l'attributo rel="stylesheet" dal tag <link>. A parte questo, il codice sembra a posto.

Si potrebbe anche voler guardare la domanda e rispondere here.

+1

Oh wow, mancava un dettaglio così importante. Grazie! – CodingWonders90

1

Prova minify. Questa classe comprime e memorizza cache js e css.

Problemi correlati