检查文件是否存在(如果存在则覆盖)PHP

检查文件是否存在(如果存在则覆盖)PHP,php,html,forms,Php,Html,Forms,我试图创建一个简单的表单,允许用户将文件上传到服务器。但是,当用户上载与服务器上已有文件同名的文件时,我遇到了一个错误。。。我想让它做的是,如果文件存在,删除旧的,并上传新的。我试过: if (file_exists($_FILES["file"]["name"])) { move_uploaded_file($_FILES["file"]["name"], $temp); 但它会生成一个错误警告:move_uploaded_file()希望参数2是字符串,数组以…给出。。。。 我是PHP新

我试图创建一个简单的表单,允许用户将文件上传到服务器。但是,当用户上载与服务器上已有文件同名的文件时,我遇到了一个错误。。。我想让它做的是,如果文件存在,删除旧的,并上传新的。我试过:

if (file_exists($_FILES["file"]["name"])) {
 move_uploaded_file($_FILES["file"]["name"], $temp);
但它会生成一个错误警告:move_uploaded_file()希望参数2是字符串,数组以…给出。。。。 我是PHP新手,读过PHP.net关于如何实现这一点的描述,但仍然感到困惑 谁能帮忙解决这个问题? 源代码:

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png", "pdf", "avi", "bmp", "css", "csv", "html", "js", "json","mdb", "exe", "xls", "pptx", "xlsx", "docx", "doc", "ppt", "pub",  "wma", "wmv", "rtf", "txt", "zip" );
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "application/pdf")
|| ($_FILES["file"]["type"] == "video/x-msvideo")
|| ($_FILES["file"]["type"] == "image/bmp")
|| ($_FILES["file"]["type"] == "text/css")
|| ($_FILES["file"]["type"] == "text/csv")
|| ($_FILES["file"]["type"] == "text/html")
|| ($_FILES["file"]["type"] == "application/javascript")
|| ($_FILES["file"]["type"] == "application/json")
|| ($_FILES["file"]["type"] == "application/x-msaccess")
|| ($_FILES["file"]["type"] == "application/x-msdownload")
|| ($_FILES["file"]["type"] == "application/vnd.ms-excel")
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.presentationml.presentation")
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|| ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
|| ($_FILES["file"]["type"] == "application/vnd.ms-powerpoint")
|| ($_FILES["file"]["type"] == "application/x-mspublisher")
|| ($_FILES["file"]["type"] == "audio/x-ms-wma")
|| ($_FILES["file"]["type"] == "video/x-ms-wmv")
|| ($_FILES["file"]["type"] == "application/msword")
|| ($_FILES["file"]["type"] == "application/rtf")
|| ($_FILES["file"]["type"] == "text/plain")
|| ($_FILES["file"]["type"] == "application/zip"))
&& ($_FILES["file"]["size"] < 20000000)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["file"]["error"] > 0) {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  } else {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        if (file_exists($_FILES["file"]["name"])) {
     move_uploaded_file($_FILES["file"]["name"], $temp);
    } else {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      $_FILES["file"]["name"]);
      echo "Stored in: ". $_FILES["file"]["name"];
    }
  }
} else {
  echo "Invalid file";
}
?>

<!--<script>
    setTimeout(function () {
        window.location.href = './.index.php'; // the redirect goes here

    }, 5000); // 5 seconds
</script>-->

您在这里使用的是这个<代码>分解函数返回数组。这是导致问题的原因

$temp = explode(".", $_FILES["file"]["name"]);
move\u上传的\u file()需要一个字符串作为第二个参数。但是您的应用程序正在尝试使用数组。
第二个参数表示要移动的文件的目标

不能将数组用于目标。您需要指定文件的放置位置。试试这个:

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

这将把它放在上传文件夹中。

警告中给出了答案,
$temp
是一个数组。您需要传递文件名,而不是分解文件名的数组。我知道这很简单。只是不擅长读取错误代码。非常感谢你。