2016-07-28 38 views
0
// What's my mime? 
$_mime = 'text/plain'; 
if ($_file[strlen($_file)-1] == 'j') { $_mime = 'text/javascript'; } 
else { $_mime = 'text/css'; } 

我真的不明白,为什么上面不工作,我的服务器会响应两个输入类型要么.min.js或.min.css为什么我的简单文件扩展名检查不起作用?

应该采取的最后一个字符,退后一步一个,它应该是js

无论如何,响应始终是text/css。当然严格的MIME限制会打破我的整个网站。

+0

这与mime类型无关。它正在检查文件名。 – isherwood

+0

为什么不只是'$ _mime = mime_content_type($ _ file);'? –

+0

@BrandonHorsley这是我替换的原始代码行,因为它未能正确检测到任何MIME类型。我相信Symfony框架问题。总是返回文本/平原。 –

回答

3

你是一个常见错误。

比方说你的文件名是script.js

长度为9,但由于数组中的计数从0开始,因此j是第7个字母,而s是第8个。

string.js 
^  ^
0  8 

所以只是做if ($_file[strlen($_file)-2] == 'j')

$file = 'script.js'; 
 

 
console.log('File name length:', $file.length); 
 
console.log('First letter:', $file[0]); 
 
console.log('Last letter:', $file[$file.length - 1]); 
 
console.log('The letter you want:', $file[$file.length - 2]);

另外,我假设$_file是你的文件的名称的字符串。

无论如何,我希望你知道你不是在做一个MIME类型的检查,而只是检查文件扩展名 - 这不提供任何安全性给你,而且你不能确定mime-文件的类型。你需要相信文件的来源。因此,如果第三方将文件上传到服务器,请不要使用这种方式来确定MIME类型。

+0

@PatrickRoberts我同意,我扩大了答案 – rpadovani

+0

这已经解决了这个问题。我知道有更好的方法来检测MIME类型,不幸的是,框架(symfony)有一个总是返回text/plain的mime类型检查。 - 我需要一个轻松快捷的解决方案,现在已经解决了这个问题。 –

+0

@JordanDyckes参见http://php.net/manual/en/function.mime-content-type.php这是[this]提到的(http://stackoverflow.com/questions/38642915/why-doesnt-my -simple-mime-type-check-work#comment64669364_38642915) –

1

看起来你只是检查文件扩展名,在这种情况下,你可以尝试一个这样的简单函数来获得扩展名。

function filename($file){ 
    return substr($file,0,strrpos($file,'.')); 
} 
function extension($file){ 
    return strtolower(substr(strrchr($file,'.'),1)); 
} 

注意,这个函数是不是防弹但在一个简单的场景,如您这是可行的。

相关问题