过去几个小时,这让我很难过。
// Using just straight up FINFO detects the mime type
$oFileInfo = new finfo( FILEINFO_MIME_TYPE );
$sMimeType = $oFileInfo -> file($_FILES['myfile']['tmp_name'] );
// $sMimeType == 'application/pdf';
// Using Zend File Transfer... detects the mime type
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('MimeType', true, array('application/pdf'));
// $upload->getMimetype('myfile') == 'application/pdf'
// But when I try to validate it throws an exception
$upload->isValid('myfile');
// Throws
// [fileMimeTypeFalse] => File 'myawesomefile.pdf' has a false mimetype of 'application/octet-stream'
代码在Apache,PHP 5.2(Zend Server)下运行良好,但现在它在Nginx,PHP-FPM,PHP 5.3下。我喜欢使用 isValid()方法来验证我上传的文件,但是mime类型不起作用。有什么建议?
答案 0 :(得分:2)
上传的文件mimetypes永远不会太可靠......
我经常检查文件扩展名是一种悲伤的尝试,如果可能,请尝试实际检查文件的内容。
如果是图像,你可以运行getimagesize(),如果它是PDF,你可以创建一个验证器来调用Zend_Pdf :: load($ filename)并检查错误。可悲的是,即使是'Image'验证器也遇到了同样的问题。
答案 1 :(得分:1)
上传或验证文件时,文件扩展名可能不正确,因为当您使用。*作为扩展名时会出现application / octet-stream。
检查 finfo 类中的 文件 功能。
//$oFileInfo -> file($_FILES['myfile']['tmp_name'] );