CodeIgniter文件上传覆盖FALSE(默认)自动重命名问题


CodeIgniter File Upload overwrite FALSE (default) auto-rename issue

CodeIgniter出现错误信息

您提交的文件名在服务器上已经存在

这有意义吗?让我解释一下。

在文件上传类首选项中有一个名为"覆盖"的首选项。它可以是TRUE或FALSE。默认值为FALSE。如果为TRUE,则文件将被覆盖。如果为FALSE,则如果存在另一个同名的文件名,则会在文件名后面添加一个数字。所以,它要么覆盖文件,要么重命名文件。怎么可能得到上面的错误?

因此,看起来CodeIgniter无法正确地重命名文件。

我看了看我的数据库,发现CodeIgniter如何重命名文件。虽然没有其他具有相同名称的文件存在,但有些文件名后面附加了下划线(_),但后面没有数字。我还发现,当我试图上传一个文件的文件名为"myfilename.zip"几次,"myfilename_.zip","myfilename_1.zip","myfilename_2.zip"…"myfilename_11.zip"在上传路径中找到。但是没有找到"myfilename.zip",而不是创建"myfilename_12.zip",它显示了上面的错误。

那么,问题在哪里?如何解决这个问题?

更新:现在我明白了为什么我得到错误信息The file name you submitted already exists on the server。检查是否存在同名文件的机制适用于100个文件。它检查是否存在具有相同名称的文件,如果找到,则向filename添加一个数字并再次检查。这种情况发生了100次。如果仍然找到具有相同名称的文件,则停止,以便脚本的执行不会花费太多时间。因此,我们可以说存在一个极限,100是一个很好的极限。

但是我仍然在寻找答案,为什么有些文件附加了一个下划线,有些带有下划线,然后是一个数字,有些只是数字。如果存在另一个具有相同名称的文件,则与向文件追加数字的模式不一致。

我通过设置$config['encrypt_name'] = TRUE修复了这个问题。

你没有把你的代码放在这里。但是,我认为您已经使用[file_name]索引将文件名设置为固定的文件名,并对其施加了约束。

我看了看我的数据库,发现CodeIgniter如何重命名文件。虽然没有其他同名的文件存在,但有些每个文件名后面都附加一个下划线(_),但后面没有数字

之所以会发生,是因为默认情况下,下面的选项将空格更改为下划线…如果你想保留空格,把它改为FALSE。

remove_spaces   TRUE

关于您的"The file name you submitted already exists on the server"消息-你必须做一些事情,比如……

if($_FILES['image']['error'] == 0){
   $file_name = $_FILES['image']['name'];
   if(file_exists($upload_dir.$file_name)) {
      show_error('The file name you submitted already exists on the server!');
   } else {
      //do_upload() etc
   }
}

我还没有测试这段代码,但它应该给你一些想法。