对于上传文件类型检查,我已实现:
$_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什么都不回显。
如何解决问题?感谢
答案 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"]