2010-01-16 70 views
0

我正在使用下面的脚本来gzip一些CSS和JS文件。它工作得很好 - 除了提供错误的内容类型的JS文件(而不是适当的应用程序/ x-javascript)。我如何改进PHP代码以便为正确的内容类型提供服务?谢谢!PHP:如何提供正确的内容类型(取决于文件扩展名?)?

的.htaccess:

AddHandler application/x-httpd-php .css .js 
php_value auto_prepend_file gzip.php 

gzip.php:

<?php 
ob_start ("ob_gzhandler"); 
header("Content-type: text/css; charset: UTF-8"); 
header("Cache-Control: must-revalidate"); 
$offset = 60 * 60 ; 
$ExpStr = "Expires: " . 
gmdate("D, d M Y H:i:s", 
time() + $offset) . " GMT"; 
header($ExpStr); 
?> 

回答

5

你可以检查请求的URL路径的结局:

$_SERVER['REQUEST_URI_PATH'] = strtok($_SERVER['REQUEST_URI'], '?'); 
$extensionToType = array(
    '.css' => 'text/css;charset=utf-8', 
    '.js' => 'application/javascript;charset=utf-8' 
); 
$extension = strrchr($_SERVER['REQUEST_URI_PATH'], '.'); 
if (isset($extensionToType[$extension])) { 
    header("Content-type: ".$extensionToType[$extension]); 
} else { 
    header("Content-type: application/octet-stream"); 
} 
+0

+1不错的答案Gumbo! – 2010-01-16 17:29:26

+0

我用你的建议替换了原来的gzip.php脚本的第3行,但是在执行脚本时出现此错误: 语法错误,意外的T_STRING,期待')'in/is/htdocs/wp1143954_G1SAXKG9IV/www/files/gzip.php第5行 在我的脚本第5行是: ”的.css' => '文本/ CSS;字符集= utf-8', – univers 2010-01-16 17:43:59

+0

@univers:你与我行替换整个第三行? – Gumbo 2010-01-16 17:55:58

0

你也可以检查mime-键入感谢FileInfo而不是使用扩展名。

相关问题