2012-08-06 66 views
8

我目前正试图为我的CSS文件实现压缩方法。我基本上以我为我的JS文件进行复制的方式进行复制,但它不起作用。我检查了Firebug工具,但没有加载CSS。使用PHP压缩和缓存CSS

如何调用css.php然后调用压缩的CSS文件?

工作代码JS,该文件是scripts.php(我没有指定.js扩展名):

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

我想为我的CSS文件做同样的:

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

css.php应该做的压缩:

<?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"; 
     } 
    } 
} 
?> 

回答

3

您缺少<link>标记的rel="stylesheet"属性。除此之外,代码看起来没问题。

你也不妨看看问题和解答here

+1

哦哇,错过了这样一个重要的细节。谢谢! – CodingWonders90 2012-08-06 20:17:06

1

尝试minify。这个类压缩和缓存js和css。