【问题标题】:PHP: how to serve right content-type (depending on file extension?)?PHP:如何提供正确的内容类型(取决于文件扩展名?)?
【发布时间】:2011-01-05 21:36:26
【问题描述】:

我正在使用下面的脚本来压缩一些 CSS 和 JS 文件。它工作得很好——除了提供内容类型错误的 JS 文件(而不是适当的应用程序/x-javascript)。我如何改进 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);
?>

【问题讨论】:

    标签: php .htaccess gzip content-type javascript


    【解决方案1】:

    您可以检查请求的 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");
    }
    

    【讨论】:

    • 我用你的提议替换了我原来的 gzip.php 脚本的第 3 行,但是在执行脚本时我得到了这个错误:语法错误,意外的 T_STRING,在 /is/htdocs/wp1143954_G1SAXKG9IV 中期待 ')' /www/files/gzip.php 在第 5 行在我的脚本第 5 行是:'.css' => 'text/css;charset=utf-8',
    • @univers:你有没有把你的整个第三行换成我的台词?
    • 看起来错误是由复制/粘贴引起的。我没有发现实际的错误是什么,但是在我手动删除并重新键入代码的第 3、4、8 和 10 行之后,一切正常。非常感谢!
    • @univers:你应该使用支持语法高亮的编辑器。
    • 我用的是TextWrangler,它支持语法高亮。因此我猜这可能是复制/粘贴/不可见字符的问题。
    【解决方案2】:

    感谢FileInfo,您也可以检查mime-type,而不是使用扩展名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-27
      • 2011-07-29
      • 2010-11-21
      • 1970-01-01
      • 2011-08-19
      • 2014-05-30
      相关资源
      最近更新 更多