0

私はzipファイルをアップロードする機能を構築しましたが、ユーザーがファイルを2回アップロードすると、最初にアップロードされたファイルは削除されませんでしたが、ファイル名に増分番号が追加されました((file.zip、file1.zip、file2.zip、、、など)

だから、ユーザーが同じファイル名をアップロードしたときに関数に伝えたいのですが、最初のファイルを削除して、この2番目のファイルをアップロードするか、それを置き換えてください...誰でもその方法を教えてくれます...

/**
 * change book source file
 * 
 * @param integer $book_id 
 */
public function upload_book_zip($book_id) {
    $vars = array();
    $vars['upload_path'] = PUBPATH . 'global/modules/bookstore/files/books_source_file/';
    $vars['allowed_types'] = 'zip';
    $vars['max_size'] = '30720';
    $vars['book_id'] = $book_id;

    $book = $this->d_book->find_by_id($book_id);
    if (isset($_POST['submit'])) {
        $file_name = $this->upload($vars);
        if ($file_name === NULL) { // error happens while uploading file
            $vars['upload_errors'] = $this->upload->display_errors("<p class='notification n-error'>", "</p>");
        } else {
            $this->d_book->update_one_field($book_id, 'bo_path_zip', $file_name);
            $this->session->set_flashdata('success_msg', lang('file_uploaded'));
            redirect('bookstore/admin_d_book/');
        }
    } else {
        $vars['upload_errors'] = NULL;
    }

    if ($book->bo_path_zip) { // load cover image
        $vars['file_path'] = base_url() . 'global/modules/bookstore/files/books_source_file/' . $book->bo_path_zip;
    } else {
        $vars['file_path'] = NULL;
    }
    $vars['controller_name'] = 'admin_d_book';
    $this->view('bookstore/admin/change_zip_file', $vars);
}

    /**
 * 
 * @param array $config the configuration array
 * @return string
 * 
 */
private function upload($config) {
    $this->load->library('upload', $config);

    if (!$this->upload->do_upload("file")) {
        return $uploadData['file_name'] = NULL;
    } else {
        $uploadData = $this->upload->data();
        log_message('debug', 'file has been uploaded ok - file name is ' . $uploadData['file_name']);
        return $uploadData['file_name'];
    }
}
4

3 に答える 3

0

より良い方法は、ファイルの md5 または sha1 チェックサムをチェックすることです。

2 人のユーザーが同じ名前の 2 つの異なるファイルをサーバーにアップロードすると、サーバー上のファイルが上書きされ、名前だけでファイルを区別することができなくなります。

また、PHPで簡単に実行できます。

于 2012-12-11T13:41:14.467 に答える