【问题标题】:how to overwrite a file after confirmation during upload in php如何在php中上传期间确认后覆盖文件
【发布时间】:2019-06-06 10:14:01
【问题描述】:

当检查文件是否已存在时,我正在尝试在提交后上传和覆盖文件。 因此,如果首先检查文件夹中是否已存在文件,然后我会给出选项:“你想覆盖它吗?”如果是,则应上传文件并覆盖旧文件。

这是我目前所拥有的:

...
// file is ready to be uploaded    
$tmpFilePath = $_FILES['file']['tmp_name'];            
$newFilePath = $dir.'/' . $_FILES['file']['name'];

// check if file already exists
if(file_exists($dir.'/' . $_FILES['file']['name'])) {
        include('includes/file_exists.php');
        exit;
 }

 //finally upload the file
 if(move_uploaded_file($tmpFilePath, $newFilePath)) {    
    include('includes/success.php'); // echo                
    exit;                                   
 }

file_exists.php 是这个代码:

<span>File already exists! Do you want to overwrite it?</span>
<form class="sfmform"  action="" method="post">
    <input type="hidden" name="overwrite" value="<?php echo $_FILES['file']['tmp_name']; ?>" />                             
    <input type="submit" class=" btn btn-primary" name="submitoverwrite" value="Yes"/>
</form>

(所有请求都由 AJAX 处理)

【问题讨论】:

  • 为什么是exit()
  • 我动态地重新加载页面;否则有些东西会输出两次
  • 这仍然不是退出的充分理由。你不应该杀死脚本,因为你不知道如何控制它。

标签: php file-upload overwrite


【解决方案1】:

如果文件已经存在,你需要做的是将上传的文件移动到一个临时位置(不能将它留在 tmp 中,因为它会被删除)并返回一个响应,告诉 UI 你需要确认覆盖(或要求一个新名称)。当用户决定时,UI 必须向服务器发送一个新请求。当您处理这个新请求时,您将文件移动到最终位置。

【讨论】:

  • 所以如果我理解正确:如果文件存在,请将文件上传到tmp 文件夹。确认请求后,将文件从tmp 文件夹移动到其最终目的地?听起来很合乎逻辑..
  • 正确。您不能将文件留在原来的临时位置,因为系统会自动删除它。
猜你喜欢
  • 2012-01-02
  • 2012-12-06
  • 2011-12-25
  • 2017-01-26
  • 1970-01-01
  • 2019-11-28
  • 2016-03-18
  • 2012-09-25
  • 2023-03-17
相关资源
最近更新 更多