我需要将文件从路径($ old_path)移动到另一个路径($ new_path)。
在将文件移动到$ new_path之前,我必须检查是否已经有一个内部具有相同“filename.ext”的文件。
如果我不这样做, 我只是将文件从$ old_path移动到$ new_path, 其他 我有一个同名的文件,我想先用1_重命名新文件,所以新文件将是'1_filename.ext'
然后我收到另一个文件,我再次检查$ new_path中是否存在'filename.ext'。
我必须重命名该文件,但这次我不能将其重命名为'1_filename.ext',因为已经存在一个具有此名称的文件。
请记住我想要做的事情,如何自动创建新文件名,每次生成最后一个filename.ext + 1作为前缀?
如果$ new-path为空,则第一个文件为filename.ext
第二次,我将(自动)将新文件重命名为1_filename.ext
第三次,我将(自动)将新文件重命名为2_filename.ext
依旧......
寻找你的建议。
P.S。如果你有适合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);
}
}
答案 0 :(得分:0)
我认为这应该做你想要的。
检查fantomic_archive
文件夹中是否存在该文件;如果没有,它只是移动文件。
否则,它会经历一个循环 - 它会在文件名的开头添加一个数字,并检查该数字是否存在。只要它生成一个唯一的文件名,它就会将文件重命名为该文件。
$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);
}
}
答案 1 :(得分:0)
基于'andrewsi'提供的ideea,最终的解决方案是:
$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); }
}