2016-07-28 2 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Почему моя простая проверка расширения имени файла не работает?

Он должен взять последний символ, шаг назад один , который должен быть либо j, либо s.

Ответ всегда текст/css независимо. Конечно, строгое ограничение на мим, а затем ломает весь мой сайт.

+0

Это не имеет ничего общего с типом mime. Он проверяет имя файла. – isherwood

+0

Почему не просто '$ _mime = mime_content_type ($ _ file);'? –

+0

@BrandonHorsley это была исходная строка кода, которую я заменил, потому что не удалось правильно определить любые типы mime. Я считаю, что проблема Symfony Framework. Всегда возвращался текст/plain. –

ответ

3

Вы отключены одной общей ошибкой.

Предположим, ваше имя файла: script.js.

Длина равна 9, но поскольку счетчик в массиве начинается с 0, j - это 7-я буква, а s - восьмая.

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, если файл загружается на ваш сервер третьей стороной.

+0

@PatrickRoberts Согласен, я расширил ответ – rpadovani

+0

Это решило проблему. Я знаю, что есть более эффективные способы обнаружения типа mime, к сожалению, у рамки (symfony) есть сломанная проверка типа mime, которая всегда возвращает text/plain. - Мне понадобилось легкое и быстрое решение, которое разрешило это как можно скорее. –

+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)); 
} 

Обратите внимание, что эта функция не является пуленепробиваемой, но в простом сценарии, таком как ваш, он будет работать.

Смежные вопросы