2012-02-26 1 views
9

Im пытаясь определить мим-тип загруженного файла, я хочу использовать FileInfo(), это то, что ив пытался, оно не работать:Finfo_file на загруженном файле для определения типа пантомимы

$uploadedfile = $_FILES['soup']['tmp_name']; 
if(isset($uploadedfile)) 
{ 
    $uploadedname = $_FILES['soup']['name']; 
    $file=$uploadedsong; 
    $file.=$uploadedname; 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $file); 

К сожалению, finfo_file, похоже, не работает, я предполагаю, что у меня есть следующие $file неверно установлен для этого, есть ли способ, которым я могу сделать это правильно с недавно загруженным файлом, используя $_FILE вот так? или я иду по этой проблеме совершенно неправильно. Используя файл, я предварительно настроил его в другом, и настройка $file="folder/file.doc" работает правильно.

ответ

18

Вам следует передать путь к функции finfo_file, а не по имени файла.

<?php 
if (isset($_FILES['soup']['tmp_name'])) { 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $_FILES['soup']['tmp_name']); 
    if ($mime == 'application/msword') { 
     //Its a doc format do something 
    } 
    finfo_close($finfo); 
} 
?> 
+0

В файле php.ini убедитесь, что у вас есть эта запись: extension = fileinfo.so или в windows: php_fileinfo.dll – metamagicson

-1

Я знаю, что это немного старый, но так как вы с помощью $_FILES супер глобального, вы можете использовать типа ключ массива файлов (т.е. $_FILES['soup']['type']) вместо того, чтобы проверка сервера после того, как файл загружен?

+3

Использование параметров массива $ _FILES для проверки типа файла является ложным. Вот почему был создан файл finfo_file, поэтому мы можем проверить двоичный файл файла, чтобы определить, действительно ли это файл изображения, а не файл php с расширением его файла, переименованным в jpg, и в этом случае тип массива $ _FILES дайте jpg. – jessiPP

0

Я использую finfo()buffer() функции, а также file_get_contents() из PHP платформы, как показано ниже

$finfo = new finfo(FILEINFO_MIME); 
$mimetype = $finfo->buffer(file_get_contents($filename)); #gives you mime type 

вы должны быть на php 5.3 или выше и убедитесь, что у вас есть finfo() расширения установлено. для linux extension=fileinfo. и в окнах: php_fileinfo.dll

вы можете иметь массив принятых типов пантомимы, а затем проверить, если он существует в этом массиве

$acceptedMime = []; 
if(in_array($mimetype, $acceptedMime, true) === true){ 
    #mime type is valid. Proceed! 
} 

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

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