对于上传文件类型检查,我实现了:
$_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");