我正在尝试将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.";
}
有什么想法吗?
答案 0 :(得分:2)
$_FILES["file"]["name"]
包含客户端发送的文件的名称,实际文件存储在临时位置$_FILES["file"]["tmp_name"]
答案 1 :(得分: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
}
答案 2 :(得分: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.";
}