某些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.pdf
, application/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