我一直在环顾四周,显然在重命名文件时应该执行// 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.";
}
注意:只要我将名称更改为尚不存在的名称,它就可以正常工作。但是,它总是最终成真。
答案 0 :(得分:4)
您必须创建一个函数来检查文件名是否已存在:
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.";
}
答案 1 :(得分:0)
http://php.net/manual/en/function.move-uploaded-file.php
取而代之的是move_uploaded_file
。如果无法移动文件,则返回false。
编辑:啊你不一定要上传吗?
然后你必须检查目标文件是否已经手动存在我假设。看看file_exists()