Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework Zend_Form_Element_File::getValues()重命名上载的文件_Zend Framework_Zend Form Element - Fatal编程技术网

Zend framework Zend_Form_Element_File::getValues()重命名上载的文件

Zend framework Zend_Form_Element_File::getValues()重命名上载的文件,zend-framework,zend-form-element,Zend Framework,Zend Form Element,我对Zend框架相当陌生,我遇到了一些奇怪的事情,我希望有人能解释一下。考虑下面的代码: <? class Form extends Zend_Form { public function init() { $upload = new Zend_Form_Element_File('upload'); $this->addElement($upload); } } if ($_POST) { $form = new Form(

我对Zend框架相当陌生,我遇到了一些奇怪的事情,我希望有人能解释一下。考虑下面的代码:

<? class Form extends Zend_Form
{
    public function init()
    {
    $upload = new Zend_Form_Element_File('upload');
    $this->addElement($upload);
    }    
}

if ($_POST)
{
    $form = new Form();
    var_dump($form->isValid($_POST));
    $values = $form->getValues();

    var_dump($_FILES, file_exists($_FILES['upload']['tmp_name']));
    exit;
}
?>
<form method="post" enctype="multipart/form-data">
    <input type="file" name="upload"/>
    <input type="submit" name="submit"/>
</form>

如果上载任何文件,$\u文件的var\u dump将输出上载的文件不存在。注释$form->getValues()行,它就在那里。在调查问题之后-getValues将实际文件(ie./tmp/php/phpBUI9M3)重命名为上传文件的名称,并将其保存在同一文件夹(ie./tmp/php/test.png)中。为什么?我的印象是getValues不应该改变任何数据

PHP:5.2.17, Zend:1.10.4

谢谢

从手册中:

默认情况下,在窗体上调用getValues()时,将自动接收该文件。这种行为背后的原因是,文件本身就是file元素的值

如果您不希望发生这种情况,那么有一些例子可以说明如何改变这种行为,但我认为这是合乎逻辑的。

手册:

默认情况下,在窗体上调用getValues()时,将自动接收该文件。这种行为背后的原因是,文件本身就是file元素的值


有一些例子说明了如果您不希望发生这种情况,如何改变这种行为,但对我来说这似乎是合乎逻辑的。

我的理解是,当文件已经在服务器上,在tmp文件夹中时,Zend会起作用;如果我要指定不同的目标目录或重命名方案,这将是有意义的,因为原始数据将存储在$\u文件中,路径/文件名将根据文件操作位于File元素中。但是,在这种情况下,重命名发生了,这不是默认应该做的事情。例如,考虑两个文件,名字相同:在上传之后,我只会用一个。我在代码中看不到任何可以解释这一点的内容。如果多个用户同时上载同一表单,这难道不能设置竞争条件吗?我在哪里可以找到替代这种行为的例子呢?据我所知,当文件已经在服务器上,在tmp文件夹中时,Zend就会起作用;如果我要指定不同的目标目录或重命名方案,这将是有意义的,因为原始数据将存储在$\u文件中,路径/文件名将根据文件操作位于File元素中。但是,在这种情况下,重命名发生了,这不是默认应该做的事情。例如,考虑两个文件,名字相同:在上传之后,我只会用一个。我在代码中看不到任何可以解释这一点的内容。如果多个用户同时上载同一表单,这难道不能设置竞争条件吗?在哪里可以找到覆盖此行为的示例?