1

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

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

例如,如果在第一个文件中我.txt在第二个文件中上传扩展文件,.docx在第三个文件中我再次选择.txtor .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();

    }
4

1 回答 1

2

错误的原因是因为您正在命名每个上传的文件:

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

调用receive()发生得如此之快,以至于time()每次调用都返回相同的值,因此您最终可能会得到重复的文件名。您只需要为每个文件生成一个更唯一的名称。像下面这样的东西应该可以工作:

md5(uniqid(time(), true)) . '.' . $originalFilename['extension'];
//or
$originalFilename['basename'] . '_' . time() . '.' . $originalFilename['extension'];
于 2012-09-22T09:05:05.967 回答