0

我试图file_exists($_FILES["file"]["name"]))用作if条件,但它总是返回 false。$_FILES["file"]["name"]$_POST从前一页编辑的。我之前曾尝试使用它isset(),虽然这有效,但else我的复合体的一部分if却没有用。

if(file_exists($_FILES["file"]["name"])){
    echo "File exists.";
} else {
    echo "File does not exist."; //always returns FALSE even if image exists
}

if(isset($_FILES["file"]["name"])){
    echo "File exists."; //always returns TRUE even if the image does not exist
} else {
    echo "File does not exist.";
}

有任何想法吗?

4

3 回答 3

2

$_FILES["file"]["name"]保存客户端发送的文件的名称,实际文件存储在临时位置$_FILES["file"]["tmp_name"]

于 2013-08-26T00:20:20.340 回答
1

试试这个(名称已更改为 tmp_name)

name = 提交的文件的名称,而不是 php 将其存储在您的服务器上的文件名)

if(file_exists($_FILES["file"]["tmp_name"])){
    echo "File exists.";
} else {
    echo "File does not exist."; //always returns FALSE even if image exists
}
于 2013-08-26T00:22:37.440 回答
1

我有一种可疑的感觉,即使您认为给定的答案会起作用,而且我并不是要反驳答案,我的意思是,我认为您想检查上传的文件是否存在于upload文件夹中。(假设上传文件夹被称为upload)。

tmp_name是一个服务器分配的名称,并被赋予一个随机的名称/值,并且会随着每个上传的文件而改变,因此我认为(如果我在这里错了,请纠正我),你将回到原点。

我引用: “当接收到临时文件的 PHP 脚本完成运行时,该临时文件将被删除:它只是一个临时文件。”

来源:https ://stackoverflow.com/a/5516019/1415724

我觉得需要做的有以下几点:

if(file_exists('upload/' . $_FILES['file']['name'])){

echo "File exists.";
} else {
  echo "File does not exist."; // or do uploading procedure
}

upload是上传文件夹。

还要确保您的表单字段名称确实是"name="file"


逻辑

以下面的代码为例。它将检查目标上传文件夹中是否存在同名文件,如果存在,则会抛出错误。

它不是检查临时文件名是否存在,而是检查实际的预期文件名本身。

如果它不存在,那么它将上传它并且不使用临时名称进行上传,而是使用来自用户输入的文件名。

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$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"]["size"] < 20000)
&& 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>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

脚注:

如果通过使用if(file_exists($_FILES["file"]["tmp_name"])){而不是我的答案中的内容,那么它将始终在覆盖要上传的实际预期文件名的同时上传,例如image1.jpg.

该逻辑不起作用,因为它正在检查tmp_name(临时)文件名是否存在于预期的上传文件文件夹中。

由于上传文件夹中不存在临时名称,因为临时名称是随机给出的,因此它将覆盖image1.jpg


因此,不能在 OP 的原始问题中使用以下代码:

if(isset($_FILES["file"]["name"])){
    echo "File exists."; //always returns TRUE even if the image does not exist
} else {
    echo "File does not exist.";
}
于 2013-08-26T00:25:56.227 回答