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

Posted

技术标签:

【中文标题】PHP:读取文件内容类型的问题【英文标题】:PHP: problems with reading the content type of a file 【发布时间】:2014-03-29 09:09:12 【问题描述】:

我有一个关于 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-file 的标题以获取内容类型“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”加载文件的内容,但是解析内容类型似乎很痛苦。有没有更好的方法来解决这个问题。

所以如果你有任何想法,请告诉我。

提前致谢

【问题讨论】:

“验证此文件时,php 确定 mime 类型“text/x-php”。该死,我想通过设置这样的标题,我可以使我的文件成为 php 的有效 css 文件” - 首先,你必须让自己意识到 file 和一个 HTTP 资源. 您的 HTTP 资源(带有 Content-Type 标头)是通过运行 PHP 代码生成的。获取该 Content-Type 标头的唯一方法是运行它(或者,正如您所做的那样,解析代码)。 但我宁愿说你的设计很臭。 我不明白你的问题。你在用这个 CSS 做什么?通过邮政获得?还是发送到浏览器?要不然是啥?有什么问题? 您想在本地文件系统中验证 php 文件是否为正确的 css 文件?你疯了??? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

http://php.net/mime_content_type

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

http://www.php.net/manual/en/ref.fileinfo.php

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

【讨论】:

我使用这个功能。那不是问题。问题是,我的 css 文件实际上是一个发送 css-header 的 php 文件(因为我想在我的 css 文件中使用变量来进行快速更改)。提到的函数让我得到 mime 类型“text/x-php”,而不是文件头“text/css”中给出的内容类型 所以?那我不明白这个问题。 那么您的问题并不是真正检测文件的 mime 类型。此外,如果您需要 CSS 中的变量,您应该查看 SASS。 @FlashThunder:问题是我将文件的内容类型设置为“text/css”。阅读 mime 类型时,我得到“text/x-php”。没关系,因为它是一个 php 文件。但我想在文件头中设置“text/css”。 D. Kasipovic 明确表示:这是我的错误,看起来我实际上不需要 mime 类型。我会看到.. 好吧,我想我不得不告别拥有 php-css 文件的想法了。该死的,看起来没有办法绕过 SASS 或 LESS 或其他什么。

以上是关于PHP:读取文件内容类型的问题的主要内容,如果未能解决你的问题,请参考以下文章

Java 的 inputStream 读取文本内容

怎么用php读取并显示另一个php文件的内容?

PHP读取文件内容

如何使用PHP读取文本文件内容

php如何读取文本指定的内容?

PHP - 读取另一个 PHP 文件的内容而不回显