PHP:读取文件内容类型的问题

时间:2014-02-26 13:36:59

标签: php content-type mime

我有一个关于mime类型以及如何在php中处理它们的问题。

我的问题:

我有一个“CSSFile”类来重新获得有效的css文件。当使用文件路径对其进行实例化时,我的类应该检查css文件是否有效。这是通过检查mime类型来完成的。如果文件是普通的css文件,则确定mime类型为“text / css”。太好了!

但是我想允许该类接受发送css-header的php文件:

header("Content-type: text/css; charset: UTF-8");

在验证此文件时,php确定mime类型“text / x-php”。 该死的,我想通过设置这样的标题,我可以使我的文件成为php的有效css文件。 (我在这里做错了吗?)

好的,我现在的解决方案是读取我的php-css文件的标题以获取内容类型“text / css”。我只是无法弄清楚如何在不包含文件的情况下以非常方式获取标题。我写了这个方法:

private function getContentType(){

    \ob_start();
    include $this->relativePath;
    \ob_end_clean();

    $headerList = \headers_list();

    $fileHeader = \array_pop($headerList);
    $parsedHeader = \explode(':', $fileHeader);

        if(!empty($parsedHeader)){

            $key = \array_search('Content-type', $parsedHeader);

                if($key !== FALSE && \array_key_exists(($key + 1), $parsedHeader)){

                    $contentType = \explode(';', $parsedHeader[($key + 1)]);

                        if(!empty($contentType)){ return  \trim(\array_shift($contentType)); }
                }
        } 

    return NULL;
}

此方法确实返回内容类型“text / css”。但我不知何故不喜欢这个解决方案。我不想通过阅读收到的标题来包含文件来检查其内容类型。寻找我喜欢非常糟糕的风格。也许我可以通过“file_get_contents”加载文件的内容,但解析内容类型似乎很痛苦。是否有更好的方法来解决这个问题。

如果您有任何想法,请告诉我。

提前致谢

2 个答案:

答案 0 :(得分:0)

php中有一个函数,它为指定的文件提供mime类型:

<强> http://php.net/mime_content_type

此外,由于它已被弃用,因此需要PECL扩展来替换它(如php.net所述):

<强> http://www.php.net/manual/en/ref.fileinfo.php

你认为你可以利用这些吗?

答案 1 :(得分:0)

如果是通过POST方式发送的,只需使用$_SERVER['CONTENT_TYPE']