PHP rename() 函数删除已经存在的文件

TMN*_*ear 1 php rename file file-rename

我一直在环顾四周,似乎// if sucess应该在文件重命名时执行:

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

不幸的是,由于即使存在另一个同名文件,此函数也会重命名文件,因此它总是成功的。

但更糟糕的是......由于另一个同名文件已经存在,它以某种方式被删除......

任何人都知道如何防止这种情况?为什么会这样?!

附加信息:

我让用户有机会通过 textarea 更改文件名,当它发布时,重命名功能将启动:

        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.";
        }
Run Code Online (Sandbox Code Playgroud)

注意:只要我将名称更改为尚不存在的名称,它就可以正常工作。但是,它总是以正确的方式结束。

小智 5

您必须创建一个函数来检查文件名是否已存在:

function rename_if_free($newPath, $oldPath) {
    if (file_exists($newPath)) return false;
    else {
        rename($oldPath, $newPath);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

并将该函数放入您的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.";
}
Run Code Online (Sandbox Code Playgroud)