为什么我的简单文件扩展名检查不起作用?

时间:2016-07-28 17:21:03

标签: php

// 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。当然严格的哑剧限制会破坏我的整个网站。

2 个答案:

答案 0 :(得分: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类型。

答案 1 :(得分:1)

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

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

请注意,此功能不是防弹,但在一个简单的场景中,例如它可以工作。