3

ファイル名がすでに存在する場合、自動インクリメント番号でファイル名を展開できるPHPのきれいな解決策はありますか?アップロードしたファイルの名前を判読できないものに変更したくありません。だから私はそれがこのようにいいだろうと思いました:(すべての画像ファイルが許可されています。)

Cover.png
Cover (1).png
Cover (2).png
…
4

4 に答える 4

6

まず、拡張子とファイル名を分けましょう。

$file=pathinfo(<your file>);

ファイルのチェックと追加を簡単にするには、ファイル名を新しい変数に保存します。

$filename=$file['filename'];

次に、ファイルがすでに存在するかどうかを確認し、存在しないまで新しいファイル名を保存します。

$i=1;
while(file_exists($filename.".".$file['extension'])){
 $filename=$file['filename']." ($i)";
 $i++;
}

さあ、あなたは<append something>まだ存在していないあなたのオリジナルファイルを持っています。

編集: 自動増分番号を追加しました。

于 2012-12-29T12:20:59.953 に答える
2

とった:

if (preg_match('/(^.*?)+(?:\((\d+)\))?(\.(?:\w){0,3}$)/si', $FILE_NAME, $regs)) {
        $filename = $regs[1];
        $copies = (int)$regs[2];
        $fileext = $regs[3];

        $fullfile = $FILE_DIRECTORY.$FILE_NAME;
        while(file_exists($fullfile) && !is_dir($fullfile))
        {
                $copies = $copies+1;
                $FILE_NAME = $filename."(".$copies.")".$fileext;
                $fullfile = $FILE_DIRECTORY.$FILE_NAME;
        }
}
return $FILE_NAME;
于 2012-12-29T12:17:14.507 に答える
0

以下のこの関数を使用して、アップロードするための一意の名前を取得できます

function get_unique_file_name($path, $filename) {
    $file_parts = explode(".", $filename);
    $ext = array_pop($file_parts);
    $name = implode(".", $file_parts);

    $i = 1;
    while (file_exists($path . $filename)) {
        $filename = $name . '-' . ($i++) . '.' . $ext;
    }
    return $filename;
}

その関数を次のように使用します

$path = __DIR__ . '/tmp/';
$fileInput = 'userfile';

$filename = $path . 
    get_unique_file_name($path, basename($_FILES[$fileInput]['name']));

if (move_uploaded_file($_FILES[$fileInput]['tmp_name'], $filename)) {
    return $filename;
}

ここでgithubページから作業スクリプトを入手できます

于 2019-03-27T18:08:21.487 に答える
-2

file_exists()関数と関数を使用rename()して、あなたがやろうとしていることを達成してください!

于 2012-12-29T12:08:50.073 に答える