2

特定のファイル プロパティを検証するために Zend_Form_Element_File を使用しています。問題のファイル入力要素は動的に作成されます。の形式にすることもできますが、必須ではありません。ただし、そうであり、ファイルがそれを介して送信された場合は、特定の基準を満たす必要があります。

フォームにファイル要素が含まれていない場合、「ファイルが定義された ini サイズを超えています」という問題が発生しました。意図した動作ですか?

FormUpload は両方のフォーム要素に対して検証する必要があることに注意してください。$_FILES 配列が空であるかどうかに応じて、さまざまな Zend_Forms を使用できますが、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>

私はそれをバグとして扱います - この問題の解決策は、検証済みの名前を入力フィールドに常に持つことです。そうしないと、このエラーが発生します。

4

4 に答える 4

1

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;
}
于 2015-09-09T06:11:11.397 に答える
1

php.iniで変更する必要がありますupload_max_filesize = 10M(Zend だけではありません)。たとえば、 wamp/php/php.ini を右クリックすると、Wamp でこのファイルにアクセスできます。それは私のために働いた。

于 2017-04-07T11:38:19.217 に答える
1

編集で述べたように、私はそれをバグとして扱います - この問題の解決策は、常に検証済みの名前の入力フィールドを持つことです。そうしないと、このエラーが発生します (これは問題とは関係ありません)。

于 2014-01-28T10:10:03.730 に答える
0

Zend_Form_Element_File は最大ファイル サイズを post_max_size に追加します。upload_max_filesize が設定されている場合は、それに設定されます。

変更するには、次のことを行う必要があります。

$upload->setMaxFileSize($newSize);

ただし、使用できるより大きなサイズは、upload_max_filesize が設定されている場合、または post_max_size upload_max_filesize が設定されていない場合です。

これらを変更するには、php.ini または .htaccess を編集します。

于 2013-02-06T19:18:03.557 に答える