当我要上传的文件已经存在时,如何覆盖该文件?


How can I overwrite a file, when the file I want to upload already exists?

我想覆盖一个文件,如果它已经存在于文件夹中。下面是我的代码:

index . php

<form action="check.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit" value="upload">Upload</button>
</form> 

check.php

if(isset($_FILES['file'])) {
    $file = $_FILES['file'];
    $target_file = 'files/'.basename($_FILES["file"]["name"]);
    if (file_exists($target_file)) {
        echo "File already exist";                  
        echo "<form action='overwrite.php' method='post'>
                <button type='submit'> Overwrite</button>
            </form>";
    } 
}

overwrite.php

move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
echo "The file is overwritten";

更新:我在问题中犯了一个错误。现在我改了。在check.php中,应该只有语句"文件已经存在"和一个指向overwrite.php并覆盖文件的按钮。(没有第二个输入字段)

当您再次创建表单时,您需要指定enctype="multipart/form-data"

 echo "<form action='overwrite.php' method='post' enctype='multipart/form-data'>
        <input type='file' name='file'>
        <button type='submit'> Overwrite</button>
    </form>";

没有enctype="multipart/form-data",它不会让你执行文件上传操作

不应该是一个值它应该是静态的所以你可以使用

您正在访问$_FILES["file"],但除非$target_file==="file",否则您没有找到任何内容。

将文件上传的name属性从$target_file更改为仅file:

        echo "<form action='overwrite.php' method='post'>
                <input type='file' name='file'>
                <button type='submit'> Overwrite</button>
            </form>";