Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter文件上载覆盖错误(默认)自动重命名问题_Php_Codeigniter_File Upload - Fatal编程技术网

Php CodeIgniter文件上载覆盖错误(默认)自动重命名问题

Php CodeIgniter文件上载覆盖错误(默认)自动重命名问题,php,codeigniter,file-upload,Php,Codeigniter,File Upload,CodeIgniter中有一条错误消息 服务器上已存在您提交的文件名 这有什么意义吗?让我解释一下 首选项中有一个名为“覆盖”的首选项。它可以是真的也可以是假的。默认值为FALSE。如果为真,则文件将被覆盖。如果为FALSE,则如果存在具有相同名称的文件名,则会在文件名后追加一个数字。因此,它要么将覆盖该文件,要么将重命名该文件。如何可能得到上述错误 因此,看起来CodeIgniter无法正确重命名文件 我查看了我的数据库,发现CodeIgniter是如何重命名这些文件的。尽管没有其他同名文件存

CodeIgniter中有一条错误消息

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

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

首选项中有一个名为“覆盖”的首选项。它可以是真的也可以是假的。默认值为FALSE。如果为真,则文件将被覆盖。如果为FALSE,则如果存在具有相同名称的文件名,则会在文件名后追加一个数字。因此,它要么将覆盖该文件,要么将重命名该文件。如何可能得到上述错误

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

我查看了我的数据库,发现CodeIgniter是如何重命名这些文件的。尽管没有其他同名文件存在,但某些文件名后面附加了下划线(389;),但后面没有数字。我还发现,当我多次尝试上载文件名为“myfilename.zip”的文件时,“myfilename_u.zip”、“myfilename_1.zip”、“myfilename_2.zip”。。。在上载路径中找到“myfilename_11.zip”。但是在那里找不到“myfilename.zip”,它没有创建“myfilename_12.zip”,而是向我显示了上面的错误

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

更新: 现在我明白了为什么会收到错误消息
,您提交的文件名已经存在于服务器上
。检查是否存在同名文件的机制适用于100个文件。它检查是否存在同名文件,如果找到,则在文件名后附加一个数字,然后再次检查。这种情况发生100次。如果仍然找到同名的文件,它将停止,因此脚本的执行不会花费太多时间。所以,我们可以说有一个极限,100是一个很好的极限


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

您没有将代码放在此处。但是,我认为您已使用[file_name]索引将文件名设置为固定名称,并对其进行了限制

我查看了我的数据库,发现CodeIgniter是如何重命名 文件夹。虽然没有其他同名文件存在,但有些 其中一个文件名后面加了下划线(551;),但后面没有数字 那

这是因为默认情况下,下面的选项将空格更改为下划线。。。如果要保留空格,请将其更改为FALSE

remove_spaces   TRUE
关于您的
“您提交的文件名已存在于服务器上”
消息- 你将不得不做一些像

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
   }
}

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

我通过设置
$config['encrypt\u name']=TRUE来解决这个问题。

我没有将代码放在这里,因为我使用的是基本代码。我没有使用[file_name]索引设置文件名,因此可以保留原始文件名。文件名中没有空格。因此,我不理解上传后将filename.zip重命名为filename_uz.zip的逻辑。就我而言,我没有将“覆盖”首选项设置为任何内容。因此,默认值为FALSE。因此,CodeIgniter的文件上载类应该通过在文件名后添加一个数字来重命名文件,并保存它(如果存在另一个同名文件)。这对我来说不太好。正如您所建议的,我不需要使用任何代码,因为CodeIgniter的文件上载类处理这些代码。我担心的是收到错误消息的原因。你在哪里添加的?