我正在使用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'];