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

时间:2013-04-25 07:05:22

标签: php codeigniter file-upload

CodeIgniter中有错误消息

  

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

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

File Uploading Class首选项中有一个名为“覆盖”的首选项。它可以是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个文件。它会检查是否存在任何具有相同名称的文件,如果找到,则会在文件名后附加一个数字并再次检查。这发生了100次。如果仍找到具有相同名称的文件,它将停止,这样脚本的执行不会花费太多时间。所以,我们可以说有一个限制,100是一个很好的限制。

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

3 个答案:

答案 0 :(得分:1)

我通过设置$config['encrypt_name'] = TRUE修正了此问题。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

我查看了我的数据库,发现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
   }
}

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