我是一个开发应用程序的新手,我允许用户上传他们的照片,当他们需要更改照片时,我不能删除旧照片,因此也不能重命名。以下是我的代码,按照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这样的名称替换旧图像。。。。。如有任何帮助,我们将不胜感激。。。。
尝试删除旧文件:
$oldfile = $config['upload_path'].$config['file_name'];
if( file_exists( $oldfile ) ){
unlink( $oldfile );
}
您可以使用$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相结合。
如果您想重写现有的,即删除旧的并保存同名的新的,则
$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";
}