Cai*_*aio 7 javascript css php mime mime-types
该finfo函数正在返回疯狂的mime类型.看下面的代码,发生了什么?
<?php
$files = array ("css.css", "index.html", "js.js", "png.png");
$info = finfo_open (FILEINFO_MIME_TYPE);
for ($i = 0; $i < count ($files); $i ++) {
$type = finfo_file ($info, $files[$i]);
$files[$i] = $type;
}
finfo_close ($info);
echo $files[0]; // text/x-c -> WHAT ?!
echo $files[1]; // text/html -> Ok !
echo $files[2]; // text/x-c++ -> WHAT ?!
echo $files[3]; // image/png -> Ok !
?>
Run Code Online (Sandbox Code Playgroud)
谢谢
Pek*_*ica 10
我并不熟悉fileinfo的工作方式,但我认为这很正常.文本文件(以及CSS和JS的内容)没有提供关于它具有什么内容的明确指示.它们没有头字节,没有定义的结构.所以穷人fileinfo所能做的就是猜测 - 结果不好,正如你所看到的那样.
我认为要成功验证.js和.css文件的内容,您必须依赖扩展,或者实际使用正确的,适当的解析器解析它们.
目前,似乎有一个错误 finfo
https://bugs.php.net/bug.php?id=53035
它与实际的mime数据库的内容有关,而不是任何错误的逻辑.
我正在做的事情(对于更严格的情况可能没有用)是硬编码我知道我需要的正确mime类型,以便硬编码只需要注释掉下一版本的PHP.Àla:
$info = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($info, $file_name);
$extension = pathinfo($file_name,PATHINFO_EXTENSION);
//there is a bug with finfo_file();
//https://bugs.php.net/bug.php?id=53035
//
// hard coding the correct mime types for presently needed file extensions
switch($extension){
case 'css':
$mime_type = 'text/css';
break;
case 'js':
$mime_type = 'application/javascript';
default:
break;
}
Run Code Online (Sandbox Code Playgroud)