0

ユーザーが新しいファイルをアップロードしたときにファイルが既に存在するかどうかをチェックし、存在する場合はファイル名に文字列を追加する php を書きました。私が欲しいのは、ファイル名の末尾に数字が追加され、同じ名前の別のファイルがアップロードされると、その数字が 1 ずつ増えることです。

例: image.png というファイル名でアップロードされた画像が既にあり、同じファイル名で別の画像をアップロードします。そのファイルの名前を image0.png に変更する必要があります。ファイル名が image.png の別の画像をアップロードしようとすると、名前を image1.png などに変更する必要があります。

私のコード内でこれを達成する方法がわかりません。誰でも私を助けることができますか?これは、重複をチェックしてファイル名に何かを追加するコード スニペットです。

if(file_exists("/customers/d/8/e/frankkluytmans.nl/httpd.www/testsite/cms/upload/".$_FILES["image"]["name"]))
{
    $filename = explode(".",$_FILES['image']['name']);
    $imageName = $filename[0]."hoi.".$filename[1];
}
else
{
    $imageName = $_FILES['image']['name'];
}

$image = mysql_real_escape_string(htmlspecialchars("/upload/".$imageName));

if (move_uploaded_file($_FILES["image"]["tmp_name"],     "./upload/".$imageName)) {�

mysql_query("INSERT frankkluytmans SET pagid='$pagid', title='$titlename', content='$contentname', image='$image', youtube='$youtube'")
or die(mysql_error()); 

header("Location: index.php"); 

}
4

2 に答える 2

2

再帰関数を使用して、番号をチェックし続けることができます。

function checkFile($path, $file, $ext, $number)
{
    if(file_exists($path.$file.$number.$ext))
    {
        if($number == "")
            $number = 0;

        $number ++;
        return checkFile($path, $file, $ext, $number);
    }

    return $path.$file.$number.$ext;
}

//run mime type things to get extension. for now lets pretend it is .jpg
// and assume you stripped the extension from the uploaded file...
// also, pass blank to last param to start the file check without a number.

$extension = ".jpg";
$filename_minus_extension = "some-image";

$filename = checkFile('path-to-directory/', $filename_minus_extension, $extension, "");

これはまったくテストされていませんが、一般的な考え方は再帰関数を使用することです。特定の質問がある場合は、お気軽にお問い合わせください。更新する場合があります。

于 2013-04-18T17:37:29.360 に答える
0

どのくらいの頻度でチェックする必要があるかわからないため、ある種のループが必要です。次に、選択した名前のファイルが存在しなくなるまで、必要なパターンで名前を変更するだけです

$info = pathinfo($filename); // get details
$name = $info['filename'];
$extension = $info['extension'];
$counter = 0;

while ( file_exists( $name.$counter.'.'.$extension ) )
{
    $counter++;
}

$new_name = $name.$counter.'.'.$extension;

コードはテストされていませんが、動作するはずです。さらに重要なことは、それが何をするのかを理解してくれることを願っています;)

于 2013-04-18T17:32:53.350 に答える