Zend framework Zend_Form_Element_File::getValues()重命名上载的文件
我对Zend框架相当陌生,我遇到了一些奇怪的事情,我希望有人能解释一下。考虑下面的代码: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(
<? 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元素中。但是,在这种情况下,重命名发生了,这不是默认应该做的事情。例如,考虑两个文件,名字相同:在上传之后,我只会用一个。我在代码中看不到任何可以解释这一点的内容。如果多个用户同时上载同一表单,这难道不能设置竞争条件吗?在哪里可以找到覆盖此行为的示例?