某些PDF文件(空的MIME类型)导致PHP上传失败

我有一个应用程序,允许上传PDF文件和压缩文件(zip,rar,焦油等...)。 我使用这个MIME类型列表作为参考来检查文件的类型。

这里是上传的PHP片段:

//this function is called by AJAX
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$check= finfo_file($finfo,$file["tmp_name"]);
finfo_close($finfo);

if ($check != 'application/pdf' && $check != 'application/x-rar-compressed' && $check != 'application/x-rar'
    && $check != 'application/zip' && $check != 'application/x-compressed' && $check != 'application/x-zip-compressed' && $check != 'multipart/x-zip'
    && $check != 'application/octet-stream' && $check != 'application/gzip' && $check != 'application/tar'
    && $check != 'application/tar+gzip') {
        echo json_encode(array('msg'=>'error. Try PDF or compressed file (zip, rar)'));exit();
}
if ($file['size'] > 10485760) { //10 MB
    echo json_encode(array('msg'=>'error. Max size is 10MB'));exit();
}
$upload = new Upload($file);//Helper class to upload files
//the file is saved

所有在我的本地环境和服务器上正常工作,但我的客户正在使用一个抛出“错误,尝试PDF或压缩文件(zip,rar)”的PDF文件。

我得到了他使用的相同文件(通过电子邮件),当我在本地机器上测试时,所有工作都正常。 在调试中, $check var的值为application/pdf

寻找任何解决方案,我发现这个问题在SO,现在我想。 我应该在第一个if块中包含application/vnd.pdfapplication/x-pdf甚至text/pdf吗? 它可能会危害我的应用程序?

我使用Firefox,但也在Chrome和Opera中进行了测试。 他在IE11中注意到这个错误,但在Chrome中也是如此。 他的电脑或浏览器是否可能更改MIME类型?

注意:有问题的文件有一个名称,如“file.PDF”(PDF是大写锁定),但我不认为这是造成问题。 正如我所说,相同的文件在我的测试中起作用。

UPDATE

在评论中@ fusion3k的建议之后,我打印了带有错误消息的$check var。 现在当我尝试上传图片时,例如:

试用PDF或压缩文件(zip,rar)。 图像/ JPEG

现在的问题是有问题的文件(现在不止一个)在错误消息后打印空字符串,并且我不知道该怎么做,一旦MIME类型显然是空的。

据用户说,PDF是由旧的扫描仪生成的,我认为这可能是问题,但奇怪的是相同的文件(当通过电子邮件发送给我)工作正常。

链接地址: http://www.djcxy.com/p/8193.html

上一篇: PHP upload fail for some PDF files (empty MIME type)

下一篇: Restrict file type to be upload