如何在PHP中检查上传文件是否为PDF

时间:2013-07-19 09:19:34

标签: php pdf mime

对于上传文件类型检查,我已实现:

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

但是,这个检查不适用于我更改扩展名的情况。

所以经过一些研究,我试过了

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

OR:

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

但是,$ fileMimeType什么都不回显。

如何解决问题?感谢

3 个答案:

答案 0 :(得分:6)

读取文件的前4个字节并检查它们是否与%PDF匹配。

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

%PDF

检查$标头

答案 1 :(得分: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");

答案 2 :(得分:1)

我猜问题是使用:

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

因为它只包含上传文件的名称。如果要在使用move_uploaded_file移动文件之前检查文件,可以使用以下命令引用临时文件:

$_FILES["my_file"]["tmp_name"]