Php 移动\u上载的\u文件尝试覆盖时未写入

Php 移动\u上载的\u文件尝试覆盖时未写入,php,html,Php,Html,我正在尝试创建一个网页,该网页将接受一个CSV文件,并最终将其上载到数据库中,但是,如果存在另一个同名文件,我目前仍无法让它覆盖自身。目前我有以下几点: index.html- <form action="upload.php" method="post" enctype="multipart/form-data"> Select CSV file to upload <input type="file" name="fileToUplo

我正在尝试创建一个网页,该网页将接受一个CSV文件,并最终将其上载到数据库中,但是,如果存在另一个同名文件,我目前仍无法让它覆盖自身。目前我有以下几点:

index.html-

    <form action="upload.php" method="post" enctype="multipart/form-data">
        Select CSV file to upload
        <input type="file" name="fileToUpload" accept=".csv">
        <input type="submit" value="Upload File" name="submit">
    </form>
失败覆盖的输出如下所示:

    Array
    (
        [fileToUpload] => Array
            (
                [name] => test.csv
                [type] => application/octet-stream
                [tmp_name] => D:\xampp\tmp\ASMTMP.tmp
                [error] => 0
                [size] => 488007
            )
    )
    fileToUpload: D:\xampp\tmp\ASMTMP.tmp -> uploads/test.csv
    womp womp :(
        $_FILES['fileToUpload']['name'] = $_POST['name'];
        $_FILES['fileToUpload']['type'] = $_POST['type'];
        $_FILES['fileToUpload']['tmp_name'] = $_POST['tmp_name'];
        $_FILES['fileToUpload']['error'] = $_POST['error'];
        $_FILES['fileToUpload']['size'] = $_POST['size'];
        $_FILES['fileToUpload']['tmp_name'] = str_replace("/","\\",$_FILES['fileToUpload']['tmp_name']);

我尝试在覆盖之前使用unlink,以确保它与实际覆盖没有问题,但这没有帮助。我没有收到任何错误,因此非常感谢您提供的任何帮助。

您正在覆盖$\u FILES变量的值

删除这些行:

最后我改变了

如果(移动上传的文件($文件[“fileToUpload”][“tmp\u名称”],$target\u文件)

如果(重命名($_文件[“fileToUpload”][“tmp_名称”],$target_文件))


这解决了我遇到的问题,以防其他人遇到此问题。我“认为”可能是因为我创建了一个新的tmp文件,所以“move\u uploaded\u file”不起作用?我认为它不喜欢这样。

总共有3行包含“move\u uploaded\u file()'在它们中。这些行中的每一行'都应该'仅当且仅当其他两行未执行时才执行。对不起,实际上我遇到问题的那一行'确实'在另一行之后运行,但我认为这不会导致问题,因为它们使用的是不同的文件。move_上载的文件($_files[“fileToUpload”][“tmp_name”],$target_file在$temp_name=“D:/xampp/tmp/ASMTMP.tmp”之后运行;move_uploaded_file($_FILES['fileToUpload']['tmp_name'],$temp_name);我正在将tmp文件重新写入某个文件,该文件将在发布后保留,然后在完成后将其删除。这可能是问题吗?以及
$_FILES['fileToUpload']['tmp\u name']=str\u replace(“/”,“\\”,$\u文件['fileToUpload']['tmp\u name']))
为什么???因此,当我第一次创建此页面时,在您按下“是”或“否”后,$\u文件数组没有被传输。因此,我通过$\u POST发送数据来保存数据。然后,一旦数据到达$\u文件数组,我会将其重新写入。$\u文件数组在该点再次写入,以确保它正确地进入其中,如果您看起来有问题的话t输出失败。正在将$\u文件数组写入屏幕,它看起来是正确的。如果是这种情况,则不要覆盖
$\u文件['fileToUpload']['tmp\u name']
-只需删除行
$\u文件['fileToUpload']['tmp\u name']=$\u POST['tmp\u name']
否则它将失败。因此,对于该部分,我也将保存tmp文件。如果您查看该部分的上方:$temp_name=“D:/xampp/tmp/ASMTMP.tmp”;移动上传的文件($_FILES['fileToUpload']['tmp_name'],$temp_name);当我按“是”或“否”时,临时文件会随着$_FILES数组一起消失。因此,我所做的就是制作我自己的名为ASMTMP.tmp的tmp文件,并将旧的tmp文件移到其中,以便保存的时间比实际的tmp文件长。我检查了新文件“ASMTMP.tmp”,它看起来正确,但该文件不会被移动。Possibly在那个tmp文件上有权限问题吗?我将尝试一下,看看是否有效。
    Array
    (
        [fileToUpload] => Array
            (
                [name] => test.csv
                [type] => application/octet-stream
                [tmp_name] => D:\xampp\tmp\ASMTMP.tmp
                [error] => 0
                [size] => 488007
            )
    )
    fileToUpload: D:\xampp\tmp\ASMTMP.tmp -> uploads/test.csv
    womp womp :(
        $_FILES['fileToUpload']['name'] = $_POST['name'];
        $_FILES['fileToUpload']['type'] = $_POST['type'];
        $_FILES['fileToUpload']['tmp_name'] = $_POST['tmp_name'];
        $_FILES['fileToUpload']['error'] = $_POST['error'];
        $_FILES['fileToUpload']['size'] = $_POST['size'];
        $_FILES['fileToUpload']['tmp_name'] = str_replace("/","\\",$_FILES['fileToUpload']['tmp_name']);