【发布时间】: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 文件?你疯了???
标签: php content-type mime