我是一个新手在应用程序上工作,我允许用户上传他们的照片,当他们需要更改图片我不能删除旧图片,因此也无法重命名。这是我在codeigniter中按照教程上传img的代码。
$config['upload_path'] = './img/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '1000';
$config['file_name'] = $id.'_img';
$this->load->library('upload', $config);
if ( $this->upload->do_upload())
{
$this->view_data['message'] = "File Uploaded";
}
在这里,我传递用户ID,因此需要重命名并用名称替换旧图像,如44_img .....任何帮助将不胜感激,提前感谢....
答案 0 :(得分:3)
尝试删除旧文件:
$oldfile = $config['upload_path'].$config['file_name'];
if( file_exists( $oldfile ) ){
unlink( $oldfile );
}
答案 1 :(得分:2)
您可以使用$this->upload->data()
检索与上传相关的数据,并在内部执行类似的操作:
if ( $this->upload->do_upload())
{
$this->view_data['message'] = "File Uploaded";
$data = $this->upload->data();
$path = $data['full_path'];
$dir = dirname($path);
$ext = pathinfo($path, PATHINFO_EXTENSION);
if(rename($path, $dir.'/'.$your_file_new_name.'.'.$ext)) {
$this->view_data['message'] .= '<br/> And renamed';
}
}
请注意,您必须拥有足够的权限才能上传文件,尤其是在要上传的目录上写入权利。此外,良好的做法是为文件提供唯一的名称,并将它们分成用户相关的目录。例如,您可以将mysql用户ID与图像ID结合使用。
答案 2 :(得分:1)
如果您想要覆盖现有的那个,即删除旧版本并保存同名的新文件,那么
$config['overwrite'] = TRUE;
$this->load->library('upload', $config);
如果你想保留两者,最好用旧版本保存新代码,代码会自动重命名新代码,你可以保存新上传图片的名称来访问它
$config['overwrite'] = FALSE;
$this->load->library('upload', $config);
if ($this->upload->do_upload())
{
$uploaded_filename = $this->CI->upload->file_name; //name of the save image
$this->view_data['message'] = "File Uploaded";
}