-4

ファイルをパス ($old_path) から別のパス ($new_path) に移動する必要があります。

ファイルを $new_path に移動する前に、同じ 'filename.ext' を持つファイルが既に存在するかどうかを確認する必要があります。

そうでない場合は、ファイルを $old_path から $new_path に移動するか、同じ名前のファイルがあり、最初に新しいファイルの名前を 1_ に変更したいので、新しいファイルは ' 1_ファイル名.ext'

次に、別のファイルを受け取り、$new_path に「filename.ext」が存在するかどうかを再度確認します。

もう一度ファイルの名前を変更する必要がありますが、今回は「1_filename.ext」に名前を変更できません。この名前のファイルが既に存在するためです。

私がやりたいことを念頭に置いて、新しいファイル名を自動的に作成し、毎回、プレフィックスの最後の filename.ext + 1 を生成するにはどうすればよいですか?

$new-path が空の場合、最初のファイルは filename.ext になります

2 回目は、新しいファイルの名前を (自動的に) 1_filename.ext に変更します。

3 回目は、新しいファイルの名前を (自動的に) 2_filename.ext に変更します。

等々 ...

あなたのアドバイスを探しています。

PS FuelPHP 用の何かがあれば、それは素晴らしいでしょう。

それは私が今までやったことです:

$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);
}

}
4

2 に答える 2

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);
    }
}
于 2012-09-13T14:12:31.137 に答える
0

「andrewsi」が提供するアイデアに基づいて機能する最終的な解決策は次のとおりです。

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

foreach ($fresh_files を $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); }

}

于 2012-09-13T14:47:54.703 に答える