在一个更大的项目中,有一个上传 2 个文件的表单。我正在使用代码点火器作为框架。表单上传后,它应该将这两个文件作为电子邮件发送。
为了将其附加到电子邮件中,我们应该拥有该文件的本地副本。因此,我将文件移动到临时文件夹并使用 [session-id]_my_file_1 和 [session-id] 的命名约定_my_file_2
最后,在发送电子邮件后,我尝试删除这些临时文件。但是unlink
并没有删除这些文件。我不知道这其中的原因。
我的猜测是:它可能仍在被 mail 命令用于上传/发送。以下是我编写的代码大纲。
$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');
////////////////////////////////
}
}
我所做的解决方案是在执行此操作之前删除临时文件夹中的文件,以便清除以前的文件。但这不是一个干净的方法,对吧?这是因为:
- 它可能正在尝试删除其他并行实例当前正在使用的其他文件
- 我希望 tmp 文件夹在我发送后为空。
最好使用代码点火器中的file_helper。
$this->load->helper("file");
delete_files($this->session->userdata('session_id').'_1');
这是这方面的文档