2016-07-28 64 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)); 
} 

注意,這個函數是不是防彈但在一個簡單的場景,如您這是可行的。

相關問題