【问题标题】:PHP rename() function deletes file if already existsPHP rename() 函数删除已存在的文件
【发布时间】:2023-03-05 13:27:02
【问题描述】:

我一直在环顾四周,似乎应该在文件重命名时执行// 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.";
        }

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

【问题讨论】:

  • 您可以先使用file_exists() 检查文件是否存在,如果存在则不要更新文件。
  • “它以某种方式被删除” - rename() 的文档明确指出:“如果新名称存在,它将被覆盖。”
  • rename 基本上只是 shell mv oldfile newfile 的 php 等价物。毫不奇怪,它正在“删除”文件。

标签: php file rename file-rename


【解决方案1】:

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

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.";
}

【讨论】:

    【解决方案2】:

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

    取而代之的是move_uploaded_file。如果文件无法移动,这将返回 false。

    编辑:啊,你不一定要上传? 然后你必须手动检查目标文件是否已经存在,我假设。查看file_exists()

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 2018-02-13
      • 2019-05-18
      • 2015-06-24
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      相关资源
      最近更新 更多