Php 移动并自动重命名(自定义)文件

Php 移动并自动重命名(自定义)文件,php,fuelphp,Php,Fuelphp,我需要将文件从一个路径($old_path)移动到另一个路径($new_path) 在将文件移动到$new_路径之前,我必须检查是否已经有一个内部具有相同“filename.ext”的文件 如果我没有, 我只是将文件从$old_路径移动到$new_路径, 其他的 我有一个同名的文件,我想先用1_u-before重命名新文件,因此新文件将为“1_-filename.ext” 然后我收到另一个文件,并再次检查$new_路径中是否存在“filename.ext” 我必须再次重命名该文件,但这次我无法将

我需要将文件从一个路径($old_path)移动到另一个路径($new_path)

在将文件移动到$new_路径之前,我必须检查是否已经有一个内部具有相同“filename.ext”的文件

如果我没有, 我只是将文件从$old_路径移动到$new_路径, 其他的 我有一个同名的文件,我想先用1_u-before重命名新文件,因此新文件将为“1_-filename.ext”

然后我收到另一个文件,并再次检查$new_路径中是否存在“filename.ext”

我必须再次重命名该文件,但这次我无法将其重命名为“1_filename.ext”,因为已经有一个同名文件

记住我要做的事情,如何自动创建新文件名,每次生成前缀的最后一个filename.ext+1

如果$new路径为空,则第一个文件将为filename.ext

第二次,我将(自动)将新文件重命名为1_filename.ext

第三次,我将(自动)将新文件重命名为2_filename.ext

等等

我在找你的建议

另外,如果你有FuelPHP的东西,那就太好了,否则。。。普通PHP就可以了

这是我到目前为止所做的:

$fresh_files = File::read_dir(DOCROOT . DS . 'opta_archive');

foreach ($fresh_files as $fresh_file) 
{

$file_name = basename($fresh_file, '.xml');

if (file_exists(DOCROOT.DS.'fantomic_archive'.DS.$file_name))
{
    //create a new unique name for the new file
    //and then move it in our archive folder

}
else
{
    //move the file in our archive folder
    File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$fresh_file);
}

}

我想这应该是你想要的

它检查文件是否存在于您的
fantomic\u归档文件
文件夹中;如果没有,它只是将文件移到上面

否则,它将通过一个循环—在文件名的开头添加一个数字,并检查该数字是否存在。一旦生成唯一的文件名,它就会将文件重命名为该文件

$fresh_files = File::read_dir(DOCROOT . DS . 'opta_archive');

foreach ($fresh_files as $fresh_file) {
    $file_name = basename($fresh_file, '.xml');

    if (! file_exists(DOCROOT.DS.'fantomic_archive'.DS.$file_name)) {
        //create a new unique name for the new file
        //and then move it in our archive folder

    File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$fresh_file);
    } else {
        $count = 1;
        while (file_exists(DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $file_name)) {
            $count++;
        }
        File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $fresh_file);
    }
}

根据“andrewsi”提供的IDEA,最终有效的解决方案是:

}

是否要将您的代码添加到问题中?首先,我不明白“-”投票。什么的密码?我要的是密码建议!堆栈溢出不是这样工作的。如果您对代码有特定问题,我们很乐意提供帮助。你的问题读起来很像“请有人为我写这个”谢谢你添加代码。我添加了一个答案。这不是一个学习编程的教室。在提出问题之前,你需要做两件事:1。阅读手册,如果你找不到你要找的东西,就在那里2。问问自己,你想问的是一个真正的问题,还是你无法解决它。对不起,若我看起来有点苛刻,但你们必须做斗争,并寻找解决方案,然后才要求这里的人花时间在一个非常基本的问题上,像这样的一个。嗯,它不完全做的工作。什么?因为,opta存档文件的第一次名称是file.ext。您的脚本将文件移动到fantomic_归档中,并将其重命名(第一次)为1_file.ext。然后我在opta_archive中收到一个新文件,名为第一个文件file.ext,这次,脚本无法完成任务。您应该能够找到如何调试它,尽管是的,从这里就可以了。 $fresh_files = File::read_dir(DOCROOT . DS . 'opta_archive');

foreach ($fresh_files as $fresh_file) { $file_name = basename($fresh_file);

$count = 1;

if (file_exists(DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $file_name))
{
    $count++;

    File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $file_name);
}
else
{
    File::rename(DOCROOT.DS.'opta_archive'.DS.$fresh_file, DOCROOT.DS.'fantomic_archive'.DS.$count . "_" . $file_name);
}