0

在一个较大的项目中,有一个上传 2 个文件的表单。我使用 codeigniter 作为框架。表单上传后,它应该将这两个文件作为电子邮件发送。

为了将其附加到电子邮件中,我们应该拥有该文件的本地副本。因此,我将文件移动到一个临时文件夹并使用 [session-id]_my_file_1 和 [session-id]_my_file_2 的命名约定

最后在发出电子邮件后,我尝试删除这些临时文件。但unlink不是删除这些文件。我不知道这是什么原因。

我的猜测是:邮件命令可能仍在使用它来上传/发送。下面是我写的代码大纲。

            $config['upload_path']      = './tmp_holder/';
        $config['allowed_types']    = 'doc|docx|pdf|rtf';
        $config['max_size']         = '10240';
        $config['file_name']        = $this->session->userdata('session_id').'_1';
        $config['overwrite']        = TRUE;

        $config2['upload_path']     = './tmp_holder/';
        $config2['allowed_types']   = 'doc|docx|pdf|rtf';
        $config2['max_size']        = '10240';
        $config2['file_name']       = $this->session->userdata('session_id').'_2';
        $config2['overwrite']       = TRUE;

        $this->load->library('upload',$config);


        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('init_app_form');
        }
        else
        {

            if($this->upload->do_upload('cvFile') === FALSE) {
                $this->load->view('init_app_form');
            }
            else {
                $file1Return = $this->upload->data();

                $this->upload->initialize($config2);
                if($this->upload->do_upload('researchFile') === FALSE) {
                    $this->load->view('init_app_form');
                }
                else {
                    //process data here
                    $file2Return = $this->upload->data();

                    $this->config->load('email');

                    $this->email->initialize($this->config->item('email_conf'));


                    $this->email->from($this->config->item('email_from'), $this->input->post('tname').' '.$this->input->post('fname').' '.$this->input->post('lname'));
                    $this->email->to($this->config->item('email_to'));

                    $this->email->subject('something');
                    $this->email->message('something'); 

                    $this->email->attach($file1Return['full_path']);
                    $this->email->attach($file2Return['full_path']);

                    if( $this->email->send() == false ) {
                        //error
                        echo $this->email->print_debugger(); exit;
                    }

                    $this->email->clear();
                                    ////////////////////////////////
                    @unlink($this->session->userdata('session_id').'_2');
                                    ////////////////////////////////
                    $this->load->view('init_app_success');
                }
                                   ////////////////////////////////
                @unlink($this->session->userdata('session_id').'_1');
                                   ////////////////////////////////
            }

        }

我所做的解决方案是在执行此操作之前删除临时文件夹中的文件,以便清除以前的文件。但这不是一个干净的方法吗?这是因为:

  1. 它可能正在尝试删除其他并行实例当前正在使用的其他文件
  2. 我希望 tmp 文件夹在我发送后为空。
4

1 回答 1

0

最好使用代码点火器中的 file_helper。

$this->load->helper("file");
delete_files($this->session->userdata('session_id').'_1');

是有关此的文档

于 2013-01-23T23:09:35.087 回答