PHP $ _FILES MIME-тип, возвращающий ноль - PullRequest
3 голосов
/ 11 марта 2012

Сейчас я пытаюсь написать сценарий, который будет принимать только определенные аудиофайлы для загрузки на сервер.

Однако некоторые типы MIME возвращаются как нулевые.

Здесьэто некоторые фрагменты кода:

PHP:

$allowedExt=array('audio/mp4a-latm');
if(isset($_POST))
{
    print_r($_FILES);
    //ToDo: Limit by File Size
    if(in_array($_FILES["fileUpload"]["type"],$allowedExt)){
    echo "file type found";
    }
    else
    echo "wrong file type";
}

HTML:

<form action="php/FileUpload.php" method="POST" enctype="multipart/form-data">
 Choose a file: <input name="fileUpload" type="file" /><br />
 <input type="submit" value="Upload" />
 </form>

Результат выше:

Array ( [fileUpload] => Array ( [name] => 02 Helix Nebula.m4a [type] => [tmp_name] => <removed for space...>))
wrong file type

Откак я понимаю, тип должен возвращать MIME-тип файла.В этом случае 'audio / mp4a-latm' для файла .m4a.

Если php правильно возвращает значение null для файлов .m4a, то каков наилучший подход, чтобы убедиться, что я действительно имею дело с аудиофайлами?Есть ли что-то более определенное, чем просто разбор расширений файлов?(убедитесь, что кто-то не изменил расширение, скажем, текстового документа)

Ответы [ 4 ]

3 голосов
/ 11 марта 2012

Элемент MIME поступает из браузера, что означает, что им можно манипулировать, и поэтому он не заслуживает доверия.

Либо проверьте расширение, либо, если вы действительно хотите, проанализируйте первые несколько байтов файла, чтобы убедиться, что это то, что ожидается.

1 голос
/ 11 марта 2012

$_FILES['userfile']['type'] - MIME-файл, , если браузер предоставил эту информацию .

http://www.php.net/manual/en/features.file-upload.post-method.php

. Поэтому этот метод не работаетхорошо.Вам следует сравнить расширение файла, взятое из

$_FILES['userfile']['name']

, с массивом допустимых расширений (который вы должны создать самостоятельно)

0 голосов
/ 11 ноября 2014

Если вы используете php 5.3 или выше, вы можете активировать расширение информации о файле php, экранируя эту строку в вашем php.ini:

extension=php_fileinfo.dll

Затем вы можете получить свой тип пантомимы из файла в php какthis:

$pathToFile = 'my/path/to/file.ext';
$fileInfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($fileInfo, $pathToFile);
finfo_close($fileInfo);

Это более надежно, чем использование того, что браузер отправляет вам в массиве $_FILES из вашего запроса POST.

0 голосов
/ 12 марта 2012

Чтобы получить MIME-тип файла, вы можете использовать

http://code.google.com/p/filing-cabinet/source/browse/trunk/mime_type_lib.php?spec=svn127&r=127

Я пользуюсь им более 2 лет, и это пока очень надежная библиотека.

...