Zend文件上传重命名错误

时间:2012-09-22 08:06:56

标签: php zend-framework zend-form zend-filter zend-file

我使用Zend Element File上传三个文件。我正在上传并重命名文件。现在的问题是,当上传相同的扩展名时,会产生错误

Zend_Filter_Exception: File 'D:\wamp2\tmp\php2443.tmp' could not be renamed. It already exists.

例如,如果在第一个文件中我上传了.txt的扩展文件,我上传了.docx,而在第三个文件中我再次选择了.txt.docx,它会生成以上给出的错误。

但是,如果我选择三种不同的扩展,那么每件事情都是最好的。我使用以下代码

  if ($form->med_file_1->isUploaded()) {

    $originalFilename = pathinfo($form->med_file_1->getFileName());

    $newFilename = time() . '.' . $originalFilename['extension'];
    $form->med_file_1->addFilter('Rename', "application_data/uploaded_files/patients/" . $newFilename,$originalFilename['basename']);
    $form->med_file_1->receive();

}

 if ($form->med_file_2->isUploaded()) {

    $originalFilename = pathinfo($form->med_file_2->getFileName());
    $newFilename = time() . '.' . $originalFilename['extension'];
    $form->med_file_2->addFilter('Rename', "application_data/uploaded_files/patients/" . $newFilename,$originalFilename['basename']);
    $form->med_file_2->receive();

}

    if ($form->med_file_3->isUploaded()) {
                $originalFilename = pathinfo($form->med_file_3->getFileName());
                $newFilename = time() . '.' . $originalFilename['extension'];
                $form->med_file_3->addFilter('Rename', "application_data/uploaded_files/patients/" . $newFilename,$originalFilename['basename']);
                $form->med_file_3->receive();

    }

1 个答案:

答案 0 :(得分:2)

出错的原因是您要命名每个上传的文件:

time() . '.' . $originalFilename['extension'];

receive()的调用发生得非常快,以至于time()在每次调用时返回相同的值,因此您最终会得到重复的文件名。您只需为每个文件生成一个更唯一的名称。以下内容应该有效:

md5(uniqid(time(), true)) . '.' . $originalFilename['extension'];
//or
$originalFilename['basename'] . '_' . time() . '.' . $originalFilename['extension'];