2

我是一个新手,正在开发一个应用程序,我允许用户上传他们的照片,当他们需要更改照片时,我无法删除旧照片,因此也无法重命名。这是我根据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 之类的名称替换旧图像.....任何帮助将不胜感激,在此先感谢....

4

3 回答 3

3

试试这个删除旧文件:

$oldfile   = $config['upload_path'].$config['file_name'];
if( file_exists( $oldfile ) ){
    unlink( $oldfile );
}
于 2013-08-30T08:23:15.717 回答
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 结合使用。

于 2013-08-30T08:21:24.663 回答
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";
}
于 2013-08-30T10:04:18.880 回答