Zend文件上传重命名错误



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

Zend_Filter_Exception: File 'D:wamp2tmpphp2443.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();
    }

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

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

receive()的调用发生得如此之快,以至于time()每次调用都返回相同的值,因此您最终可能会得到重复的文件名。 您只需要为每个文件生成一个更独特的名称。 类似以下内容的内容应该有效:

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

最新更新