我正在尝试一个简单的文件上传PHP脚本,并进行一些文件有效性检查。这是一个简单的W3C示例,添加了while循环来检查文件是否存在,然后在文件名末尾添加一个增量(就在文件扩展名之前)。
该脚本有效,但只会产生1个增量。例如,我上传了一个名为'test.jpg'的文件,它上传,我重新上传相同的文件,脚本生成'test1.jpg' - 但之后,脚本将继续重写'test1.jpg' !
我在这里做错了什么?
<?php
$allowedExts = array("ai", "esp", "jpg", "jpeg", "png", "tiff");
$temp = explode(".", $_FILES["file"]["name"]);
$name = pathinfo($_FILES["file"]["name"], PATHINFO_FILENAME);
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$i = '';
if ((($_FILES["file"]["type"] == "image/ai")
|| ($_FILES["file"]["type"] == "image/esp")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/tiff"))
&& ($_FILES["file"]["size"] < 50000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else
{
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
while(file_exists("upload/" . $_FILES["file"]["name"] . $i)) {
$i++;
}
$basename = $name . $i . '.' . $extension;
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $basename);
} else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
}
}
} else
{
echo "Invalid file";
}
?>
答案 0 :(得分:0)
首先,您应该使用值$i
而不是0
(空字符串)初始化''
变量。
之后你可以检查
if(file_exists("upload/" . $name . $i . '.' . $extension)) { /* .... */ }
因为您将文件移动到
$basename = $name . $i . '.' . $extension;
之后。因此,如果您上传test.jpg
,请检查upload/test.jpg
是否已存在。如果是,则进入while
循环并检查文件upload/test.jpg1
是否已存在。如果不是,则将上传的文件移至upload/test1.jpg
。
下次再次检查文件upload/test.jpg1
是否已存在。它没有。