【问题标题】:File exceeds the defined ini size when using iframe使用 iframe 时文件超出定义的 ini 大小
【发布时间】:2011-07-20 14:23:41
【问题描述】:

我正在使用精美的 iframe 框来显示具有文件上传按钮的页面。当我单击表单提交时,我得到“文件超出定义的 ini 大小”。我检查了 google 和 stackoverflow 下的一些链接。但是找不到。我的表格中有enctype="multipart/form-data"。以下是我的代码

public function createForm($data = array())
    {
        $this->setMethod(Zend_Form::METHOD_POST);
        $this->setEncType(Zend_Form::ENCTYPE_MULTIPART);
                $this->setAttrib('id', 'createsub');
            $this->setAction(
              $this->getView()->getHelper('url')->url(array(
                'controller' => 'test',
                'action'     => 'create'
              ))
            );  

        $this->setDecorators(array(
              'Description',
              'FormElements',
              'Form'
        ));

        $fnameNotEmpty = new Zend_Validate_NotEmpty();
        $fnameNotEmpty->setMessage('Name cannot be empty.');
        $fnameStrlen = new Zend_Validate_StringLength(1, 20);

        $name = new Zend_Form_Element_Text('name', array(
          'label' => 'Name:',
          'value' => '',
          'class' => 'text-size text',
          'tabindex' => '1',
          'required' => true,
          'validators' => array(
                array($fnameNotEmpty, true),
                array($fnameStrlen, true)
          ),
      'decorators' => $this->requiredElementDecorators,
      'description' => '<img src="../../'.$baseurl.'/images/star.png" alt="required" />',
          'filters' => array('StringTrim')
        ));
        $this->addElement($name);

....         .....           .....

        $brochure = new Zend_Form_Element_File('brochure', array(
          'label' => 'Brochure:*',
          'value'   => '',
          'class' => 'text-size text',
          'tabindex' => '3',
          'required' => true,
          'filters' => array('StringTrim')
        ));
        $this->addElement($brochure);




            $submit = $this->createElement('button','addtbtn',array('class'=>'Test','label'=>'Create'));
            $submit->setIgnore(true);
    $this->addElement($submit);
        return $this;
    }

另外,如果我不使用 iframe,我可以上传我的图片...很奇怪。

我通过以下代码使用 Ajax 进行验证,

<script type="text/javascript">
var Path="<?php echo $this->eurl; ?>"
$(function()
{
    vReg=0
    $("#addtbtn").click(function()
    {
        if(vReg == 1)
        {
            return true;
        }
        else{
        var url = 'validateform';
        var data = {};
        $("input").each(function()
        {
            data[$(this).attr('name')] = $(this).val();
        });
        $("select").each(function()
        {
            data[$(this).attr('name')] = $(this).val();
        });
        $("textarea").each(function()
        {
            data[$(this).attr('name')] = $(this).val();
        });
                $.post(url,data,function(resp)
        {
            vError=""
            for(id in resp){
                oResp=resp[id];
                for(key in oResp){
                    vError +=oResp[key]+"\n"
                }
            }
            if(vError == ''){
                vReg=1
                                 $("#createform").attr('target','_top');
                 $("#createform").submit();
                                return true;
            }
            else{
                                $("#createform").attr('target','_self');
                alert(vError)
                                return false;
                            }
        },'json');

        }
    });
});

</script>

在我的控制器中也有以下功能

    public function validateformAction()
{
    $this->_helper->viewRenderer->setNoRender();
    $this->_helper->getHelper('layout')->disableLayout();

        $p      = new Admin_Model_DbTable_Test();
        $p      = $p->getData();

        foreach($p AS $k => $v)
        {
            $p[$v['catid']] = $v['name'];
        }

        $form = new Admin_Model_Form_SubTest();
        $f = $form->createForm(array('parents' => $p));
    $f->isValid($this->_getAllParams());
    $json = $f->getMessages();
    echo Zend_Json::encode($json);
}

所以这将调用我在帖子顶部给出的函数并进行验证并返回错误。但在这里我总是得到"File exceeds the defined ini size "我做错了这段代码。

请在这方面帮助我。

【问题讨论】:

    标签: php zend-framework iframe file-upload


    【解决方案1】:

    检查 .ini 文件中的 upload_max_filesize 设置。这就是这个错误的来源。

    【讨论】:

    • 谢谢,但即使我点击没有上传文件的表单,我也会收到消息。我还检查了 upload_max_filesize ,图像大小小于 upload_max_filesize。
    • 另外,如果我不使用 iframe,我可以上传我的图片...很奇怪
    • 在 iframe 中的上传与在常规页面中的上传之间应该没有任何区别 - 它仍然只是一个 http 上传。可能想通过转储 $_FILES 来检查服务器上收到的内容。
    【解决方案2】:

    当你在你的文件输入上调用 .val() 时,你会得到你选择的文件的路径,而你的验证器会期待文件本身,因此会出现奇怪的错误。大多数人在进行 ajax 验证时选择跳过文件输入,并在提交时检查它。

    【讨论】:

      猜你喜欢
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多