2013-07-19 3 views
0

Для проверки типов файлов загрузки, я реализовал:Как проверить файл для загрузки, является ли PDF в PHP

$_FILES["file"]["type"][$i] == 'application/pdf' 

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

Таким образом, после некоторых исследований я попытался

$finfo = new finfo(); 
$fileMimeType = $finfo->file($_FILES["file"]["name"][$i]); 

ИЛИ:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$fileMimeType = finfo_file($finfo,$_FILES["file"]["name"][$i]) 

однако, $ fileMimeType не эхо ничего.

Как исправить проблему? спасибо

+2

вы можете использовать 'команду File' оболочки, или' fread' первые несколько байт файла, то вы можете знать тип. – DevZer0

+0

не могли бы вы представить пример для случая с файлом для загрузки? thanks – user782104

+0

Зачем вам менять расширение? –

ответ

1

Я думаю, что проблема использования:

$_FILES["my_file"]["name"] 

, поскольку он содержит только имя загружаемого файла. Если вы хотите проверить файл перед его перемещением с помощью move_uploaded_file вы можете обратиться к временному файлу с помощью:

+1

правильно. спасибо – user782104

1

Если вы прочитали файл, используя fread, вам понадобится словарь всех определений типов заголовков файлов. Если вы хотите использовать команду file Shell

$out = exec("file 'R-intro.pdf' | cut -d: -f2 | cut -d, -f1"); 
if (trim($out) == "PDF document") { 
    echo "1"; 
} 

Для дальнейшего расширения о том, как заменить имя постоянного файла с загруженным файлом см ниже.

$out = exec("file '" . $_FILES['file']['tmp_name'] . "' | cut -d: -f2 | cut -d, -f1"); 
+0

Спасибо за ответ. Поскольку я проверяю файл загрузки, который должен быть временным файлом ($ _FILES ["file"] ["name"] [$ i]), как я могу проверить его с помощью сценария оболочки? – user782104

+0

это не скрипт оболочки, это PHP-скрипт с использованием команды оболочки, вам нужно заменить 'R-intro.pdf' на имя файла tmp – DevZer0

5

Прочитайте первый 4 байта файла и убедитесь, что они соответствуют %PDF.

$filename = "pdffile"; 
$handle = fopen($filename, "r"); 
$header = fread($handle, 4); 
fclose($handle); 

Проверить $ заголовок против %PDF

+0

Это потрясающее решение. работает очень хорошо. – jasper

+0

Когда вы говорите, вы имеете в виду in_array ($ header, "% PDF"); ? Не знаете, как это сделать с помощью% –