【问题标题】:Why does Zend Framework Validate fail for MimeType, when calling isValid()为什么调用 isValid() 时,MimeType 的 Zend Framework Validate 会失败
【发布时间】:2011-05-24 21:31:30
【问题描述】:

在过去的几个小时里,这让我很困惑。

            // 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 类型不起作用。有什么建议么?

【问题讨论】:

  • 这取决于服务器,Linux 服务器通常可以工作,如果您使用 XAMPP 或 WAMP,它们通常会在配置中缺少一些东西

标签: php zend-framework zend-validate


【解决方案1】:

上传的文件 mimetype 永远不会太可靠...

我通常检查文件扩展名是一种悲伤的尝试,如果可能的话,请尝试实际检查文件的内容。

如果是图像,你可以运行 getimagesize(),如果是 PDF,你可以创建一个验证器来调用 Zend_Pdf::load($filename) 并检查错误。可悲的是,即使是“图像”验证器也遇到了同样的问题。

【讨论】:

  • 谢谢。我希望我不必放弃使用验证器进行文件上传,但如果我不能从中获得可靠的 mime 类型,也许我会放弃它。
  • NP - 仅供参考,您仍然可以创建一个自定义验证器来执行此操作并将其附加到您的上传器。
【解决方案2】:

您上传或验证文件时可能文件扩展名不正确,因为使用 .* 作为扩展名时会出现 application/octet-stream。

检查 finfo 类中的 file 函数。

//$oFileInfo -> file($_FILES['myfile']['tmp_name'] );

【讨论】:

  • 我用来测试的文件是带有扩展名的普通旧 PDF。此外,我想弄清楚的是FINFO和Zend Framework都可以看到mime类型,但是当我使用isValid函数进行验证时,它认为文件是application/octet-stream
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
相关资源
最近更新 更多