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

时间:2016-01-27 23:19:13

标签: php pdf file-upload mime

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

以下是用于上传的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文件。尝试PDF或压缩文件(zip,rar)”。

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

寻找我在SO中找到this question的任何解决方案,现在我在思考。我应该在第一个application/vnd.pdf区块中加入application/x-pdftext/pdf甚至if吗?它可能会危及我的申请?

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

注意:有问题的文件的名称类似于“file.PDF”(PDF是Caps Lock),但我认为它不会导致问题。正如我所说,同样的文件在我的测试中有效。

更新

根据评论中@ fusion3k的建议,我打印了$check var并显示错误消息。现在,当我尝试上传图片时,我得到:

  

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

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

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

0 个答案:

没有答案