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

如何在PHP中检查上传文件是否为PDF,php,pdf,mime,Php,Pdf,Mime,对于上载文件类型检查,我实现了: $_FILES["file"]["type"][$i] == 'application/pdf' 但是,在我更改扩展名的情况下,此检查不起作用 所以,经过一些研究,我尝试了 $finfo = new finfo(); $fileMimeType = $finfo->file($_FILES["file"]["name"][$i] ); 或: 但是,$fileMimeType不回显任何内容 如何解决这个问题?谢谢如果您使用fread阅读文件,您需要有一个

对于上载文件类型检查,我实现了:

$_FILES["file"]["type"][$i] == 'application/pdf'
但是,在我更改扩展名的情况下,此检查不起作用

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

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

但是,$fileMimeType不回显任何内容


如何解决这个问题?谢谢

如果您使用
fread
阅读文件,您需要有一个包含所有文件头类型定义的字典。如果要使用
文件
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");

如果使用
fread
读取文件,则需要有一个包含所有文件头类型定义的字典。如果要使用
文件
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");

我想问题在于使用:

$_FILES["my_file"]["name"]
因为它只包含上载文件的名称。如果要在移动文件之前使用
move\u-uploaded\u-file
检查文件,可以使用以下方法参考临时文件:

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

我想问题在于使用:

$_FILES["my_file"]["name"]
因为它只包含上载文件的名称。如果要在移动文件之前使用
move\u-uploaded\u-file
检查文件,可以使用以下方法参考临时文件:

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

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

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

对照
%PDF
检查$header读取文件的前4个字节,并检查它们是否匹配
%PDF

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

对照
%PDF

检查$header。您可以使用
文件
shell命令,或
fread
文件的前几个字节,然后您就可以知道文件类型。您是否介意提供一个上传文件案例的示例?谢谢你为什么要更改扩展名?你可能对这篇文章感兴趣@user782104我已经为你发布了一个答案。你可以使用
file
shell命令,或者
fread
文件的前几个字节,然后你就可以知道文件的类型。你介意提供一个上传文件的例子吗?谢谢你为什么要更改分机?你可能对这个帖子感兴趣@user782104我已经为你发布了一个答案。谢谢你的回答。我正在检查上载文件,它应该是临时文件($_FILES[“file”][“name”][i]),如何使用shell脚本检查它?这不是shell脚本,这是使用shell命令的php脚本,您需要将
R-intro.pdf
替换为tmp文件名谢谢回答。当我检查上传文件时,它应该是一个临时文件($_FILES[“file”][“name”][$i]),我如何使用shell脚本检查它?这不是一个shell脚本,这是使用shell命令的php脚本,当你说check时,你需要用tmp文件名替换
R-intro.pdf
?当您说check时,不确定如何使用%执行此操作您是指在_数组中($header,“%PDF”)?不知道如何使用%