2016-01-05 3 views
0

У меня возникла проблема с загрузкой файлов с использованием рамки Yii2, но я думаю, что этот вопрос идет глубже, чем проблема с каркасом. У меня есть приложение, которое позволяет пользователю делать pdf загрузки файлов, пока здесь мое приложение не работает нормально, но у меня проблемы, когда какой-либо смарт-файл переименовывает расширение имени файла из чего-либо в PDF. Приложение не проверяет этот трюк.Как заблокировать загрузку сухих файлов?

Я пробовал без успеха, чтобы проверить mimetype. Теперь я ищу другой путь.

Кто-нибудь знает, как заблокировать этот чит?

+1

Возможный дубликат [как проверить тип загруженного файла - pdf) (http://stackoverflow.com/questions/11039095/how-to-check-the-uploaded-file-type-is-pdf) – dev0

+1

Самый надежный способ - открыть файл в php pdf-библиотеке, а затем сохранить его в новом месте - если это не файл в формате pdf, программа чтения PDF не выполнит или исключит исключение. Это намного больше, чем просто проверка типа mime (как упоминалось в вышеупомянутом связанном вопросе by @ dev0) – Steve

+0

@ dev0 не работает для меня. Приложение продолжает загружать. –

ответ

0

Проблема была решена с помощью функция mime_content_type.

Проверить функция здесь php.net

Эта функция возвращает тип реального мим.

0

лучший способ проверить тип пантомимы файла:

http://php.net/manual/en/function.finfo-file.php

<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
if(finfo_file($finfo,$filename) == 'application/pdf'){ 
    // input file is pdf 
} 
finfo_close($finfo); 
?> 
+0

Спасибо за вашу помощь, но как-то он не работает для меня. –

1

Его лучше держать его простым и просто использовать этот

<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
if(finfo_file($finfo,$filename) == 'application/pdf'){ 
    // input file is pdf 
} 
?> 

Поскольку вы сказали, ее не работает для вас вы можете попробовать эти

Если вы используете сервер Linux, п использовать команды оболочки, чтобы проверить их MIME-тип

<?php 
function detectMimeType($filename='') 
{ 
    $filename = escapeshellcmd($filename); 
    $command = "file -b --mime-type -m /usr/share/misc/magic {$filename}"; 

    $mimeType = shell_exec($command); 

    return trim($mimeType); 
} 
?> 

Или вы можете попробовать этот метод .Здесь мы предполагаем, что Pdf файл начинается со строки% PDF. [обычно это начать с% PDF].

<?php 
function detectFileType($filename='') 
{ 
    $handle = fopen($filename, "rb"); 
    $contents = fread($handle, 4); 

    fclose($handle); 
    if($contents == "%PDF") 
    { 
     return "application/pdf"; 
    } 
    else 
    { 
     return "application/octet-stream"; //unknown type 
    } 
} 
?> 

[этот код не проверялась]

Смотрите эти ссылки вы получите некоторую информацию о том, что пошло не так

http://php.net/manual/en/function.mime-content-type.php

http://php.net/manual/en/ref.fileinfo.php

+0

Спасибо, я попробую это, в следующие выходные. –

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