1

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

$_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

3 回答 3

6

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

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

检查 $header 反对%PDF

于 2013-07-19T09:34:09.970 回答
1

如果您使用读取文件fread,则需要拥有所有文件头类型定义的字典。如果你想使用fileshell 命令

$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");
于 2013-07-19T09:29:59.167 回答
1

我想问题是使用:

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

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

$_FILES["my_file"]["tmp_name"]
于 2013-07-19T09:34:01.540 回答