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(一時) ファイル名が目的のアップロード ファイル フォルダーに存在するかどうかを確認しているため、そのロジックは機能しません。

アップロードフォルダに一時名が存在しないため、tmp 名はランダムに与えられるため、上書きされます。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 に答える