Php 检测和验证ZF2中的Mime类型
我试图限制在zend framework 2中上载某些文件类型(只允许.png和.jpg文件),但在这样做时遇到了一些问题 即使我在验证器中只指定了两种mime类型,它也会上传。这是密码Php 检测和验证ZF2中的Mime类型,php,validation,zend-framework2,mime-types,Php,Validation,Zend Framework2,Mime Types,我试图限制在zend framework 2中上载某些文件类型(只允许.png和.jpg文件),但在这样做时遇到了一些问题 即使我在验证器中只指定了两种mime类型,它也会上传。这是密码 $file = new File(); $form->setInputFilter($file->getInputFilter()); $captions = $request->getPost()->toArray(); $get_
$file = new File();
$form->setInputFilter($file->getInputFilter());
$captions = $request->getPost()->toArray();
$get_file = $this->params()->fromFiles('file');
$data = array_merge_recursive($this->getRequest()->getPost()->toArray(), $this->getRequest()->getFiles()->toArray());
$form->setData($data);
if ($form->isValid()) {
$size = new Size(array('max' => FileHandler::FILESIZE));
$mime = new MimeType('image/jpg,image/png');
$adapter = (new Http())->setValidators(array($size, $mime), $get_file);
if (!$adapter->isValid()) {
$error_msg = $adapter->getMessages();
$error = array();
foreach ($error_msg as $key => $value) {
$error[] = $value;
}
$form->setMessages(array('file' => $error));
return $this->redirect()->toUrl('/admin/upload-failure');
如您所见,它被设置为一个验证器来检查大小和mime类型
对此有什么想法吗?通过传递无效的选项格式,您正在实例化
MimeType
验证器。它应该是一个具有“mimeType”键的数组。检查可用选项
与其尝试使用Http实例内联验证您的文件,我建议为此作业编写一个自定义的专用InputFilter类。Zend Framework 2有一个与其他框架不同的特殊功能,特别是在验证流方面:FileInput的验证器在过滤器之前运行。它还自动注入并使用验证器,验证器还检查文件在上传过程中可能出现的错误
通过创建自定义的MyFileFilter
类,您可以轻松利用所有这些内置功能,如下所示:
<?php
namespace Application\InputFilter;
use Zend\InputFilter\FileInput;
use Zend\InputFilter\InputFilter;
use Zend\Validator\File\Size;
use Zend\Validator\File\MimeType;
class MyFileFilter extends InputFilter
{
/**
* Constructor
*/
public function __construct($postFile)
{
$size = new Size(['max' => FileHandler::FILESIZE]);
$mime = new MimeType(['mimeType' => 'image/jpg,image/png']);
$input = new FileInput('file');
$input->setValue($postFile);
$input->getValidatorChain()
->attach($size)
->attach($mime);
$this->add($input);
}
}
这种方法的另一个好处是,您可以在应用程序中重复使用MyInputFilter来满足其他上传要求,只需做一些小的改进。(参数化mime类型和大小值等)
$filter = new \Application\InputFilter\MyFileFilter($get_file);
if($filter->isValid()) {
// ...
}