【问题标题】:Zend_Form_Element_File and "File exceeds the defined ini size" issueZend_Form_Element_File 和“文件超出定义的 ini 大小”问题
【发布时间】:2013-02-06 19:11:39
【问题描述】:

我正在使用 Zend_Form_Element_File 来验证某些文件属性。有问题的文件输入元素是动态创建的 - 即。它可以是形式,但不需要;但是,如果是,并且文件已通过它提交,则它需要满足某些条件。

当表单不包含文件元素时,我遇到了“文件超出定义的 ini 大小”问题。这是一种预期的行为吗?

请记住,FormUpload 应该验证两个表单元素。 我可以使用不同的 Zend_Forms,这取决于 $_FILES 数组是否为空,但感觉是一个糟糕的解决方案,因为 Zend_Form 应该为我验证数据/数据字段。

复制问题的代码:

<?php

class FormUpload extends Zend_Form
{
    public function init()
    {
        $upload = new Zend_Form_Element_File('upload');
        $upload->setRequired(false);
        $this->addElement($upload);
    }
}

var_dump($_POST, $_FILES);
if (!empty($_POST))
{
    $form = new FormUpload();

    if ($form->isValid($_POST))
    {
        $values = $form->getValues();
        var_dump($values);
    }
    else
        var_dump($form->getMessages());
}

?>

<form method='post' enctype="multipart/form-data">
    <input type='hidden' name='something' value='something'/>
    <input type='submit' value='submit'/>
</form>

<form method='post' enctype="multipart/form-data">
    <input type='file' name='upload'/>
    <input type='submit' value='submit'/>
</form>

我会将其视为一个错误 - 解决此问题的方法是始终有一个带有经过验证的名称的输入字段;否则会出现这个错误。

【问题讨论】:

    标签: php zend-form zend-form-element


    【解决方案1】:

    正如我在编辑中所说:我会将其视为错误 - 解决此问题的方法是始终使用经过验证的名称的输入字段;否则会出现此错误(与问题无关)。

    【讨论】:

      【解决方案2】:

      您可以添加一个解决方法来覆盖 Zend_Form 的 isValid() 方法。那里有一个合法的错误,当没有文件上传时会产生相同的错误,但它仍然会尝试验证。也许这会对那里的人有所帮助。

      public function isValid($data) {
          $valid = parent::isValid($data);
      
          $errorCount = 0;
          foreach($this->getElements() as $elem) {
      
              if ($elem->hasErrors()) {
                  $errorCount++;
              }
      
              // Related issues:
              // http://framework.zend.com/issues/browse/ZF-12159
              // http://framework.zend.com/issues/browse/ZF-10279
              // http://framework.zend.com/issues/browse/ZF-12189 
      
              if ($elem instanceof Zend_Form_Element_File && !$elem->isRequired() && !isset($_FILES[$elem->getName()]) && $elem->hasErrors()) {
                  $elem->clearErrorMessages();
                  $elem->setTransferAdapter( 'Http' ); // reset any errors that may be on the transfer adapter
                  $errorCount--;
              }
          }
      
          if ($this->_errorsForced) {
              return false;
          }
      
          if ($errorCount==0) {
              $this->_errorsExist = false;
          }
      
          return $errorCount==0;
      }
      

      【讨论】:

        【解决方案3】:

        您应该在 php.ini 中更改 upload_max_filesize = 10M(不是仅在 Zend 中)。例如,您可以通过右键单击 wamp/php/php.ini 在 Wamp 中访问此文件。 它对我有用。

        【讨论】:

        • 这是在本地 Apache 上,当我可以通过 ini_set 更改系统设置时
        【解决方案4】:

        Zend_Form_Element_File 将最大文件大小添加到 post_max_size。如果设置了upload_max_filesize,它将设置为那个。

        要改变你需要:

        $upload->setMaxFileSize($newSize);
        

        但如果设置或 post_max_size upload_max_filesize 未设置,您可以使用的较大大小是upload_max_filesize。

        要更改这些,请编辑您的 php.ini 或 .htaccess。

        【讨论】:

        • 添加$upload-&gt;setMaxFileSize(2 * 1024 * 1024)ini_set('upload_max_filesize', '10M'); ini_set('post_max_size', '10M'); 没有任何效果。
        猜你喜欢
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 2014-12-03
        • 2012-06-04
        相关资源
        最近更新 更多