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


How to check whether the upload file is PDF in 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不回显任何内容。

如何解决问题?感谢

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

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

根据%PDF 检查$header

我想问题出在使用:

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

因为它只包含上传文件的名称。如果你想在使用move_uploaded_file移动之前检查文件,你可以使用参考临时文件

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

如果使用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");