1

私は周りを見回していて// if sucess、ファイルの名前が変更されたときに実行する必要があるようです:

if(rename("$filepath$oldfilename", "$filepath$filename")===true) { // if success }

残念ながら、この関数は同じ名前の別のファイルが存在する場合でもファイルの名前を変更するため、常に成功します。

しかし、さらに悪いことに...同じ名前の別のファイルがすでに存在するため、それはどういうわけか削除されます...

誰かがこれを防ぐ方法を知っていますか?そして、なぜこれが起こっているのですか?!

追加情報:

ユーザーにテキストエリアを介してファイル名を変更する機会を与えています。ファイルが投稿されると、名前変更機能が開始されます。

        if(rename("$filepath$oldfilename", "$filepath$filename")===true)
        {
            $WhatToUpdateQueryResult = mysql_query($WhatToUpdateQuery) or die ("query fout ". mysql_error() );      

            if ($WhatToUpdateQueryResult == 1)
            {
                $uploadmsg = "Document name successfully updated.<br/> From: $oldfilename <br/> To: $filename.";
            }
        }
        else
        {
            $uploadmsg = "Can't update document. A file with the same name already exists.";
        }

注:名前をまだ存在しない名前に変更する限り、正常に機能します。しかし、それでも、それは常に真実になります。

4

2 に答える 2

5

ファイル名がすでに存在するかどうかをチェックする関数を作成する必要があります。

function rename_if_free($newPath, $oldPath) {
    if (file_exists($newPath)) return false;
    else {
        rename($oldPath, $newPath);
        return true;
    }
}

そして、その関数をifステートメントに入れます。

今では

if (rename_if_free($filepath.$oldfilename, $filepath.$filename) === true) { 
    $WhatToUpdateQueryResult = mysql_query($WhatToUpdateQuery) or die ("query fout ". mysql_error() );      

        if ($WhatToUpdateQueryResult == 1)
        {
            $uploadmsg = "Document name successfully updated.<br/> From: $oldfilename <br/> To: $filename.";
        }
}
else {
    $uploadmsg = "Can't update document. A file with the same name already exists.";
}
于 2012-12-04T14:12:16.720 に答える
0

http://php.net/manual/en/function.move-uploaded-file.php

move_uploaded_file代わりに取ってください。ファイルを移動できない場合、これはfalseを返します。

編集:ああ、あなたは必ずしもアップロードをしているわけではありませんか?次に、宛先ファイルがすでに手動で存在するかどうかを確認する必要があります。チェックアウトfile_exists()

于 2012-12-04T14:10:55.670 に答える