1

ZendElementFileを使用して3つのファイルをアップロードしています。ファイルをアップロードして名前を変更しています。ここで問題となるのは、同じ拡張機能をアップロードすると、次のエラーが発生することです。

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

たとえば、最初のファイルでextenstionoのファイルをアップロード.txtし、2番目にアップロード.docxし、3番目にもう一度.txtまたはを選択.docxすると、上記のエラーが生成されます。

しかし、3つの異なる拡張機能を選択すると、すべてが最適になります。私は次のコードを使用しています

  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 に答える