我通过php上传文件。 可以上载的文件数量由存储在数据库中的值确定。所以让我们说,这个值是3,比我的代码显示三个html文件输入。这很有效。我也可以重命名一个文件。工作扩展过滤器和大小限制..但是当我尝试使用多个时,我堆叠...新名称应该是'列表元素的数量' - '基本文件名'。 例如:
1-thisisanimage.jpg
2- anotherimage.jpg
3 andthisalso.jpg
我试过foreach但我认为我过于复杂。我也尝试过来自互联网的不同脚本,但实际上我都不能做到这一点。任何人? :)
if (!file_exists("uploads/".$date."-".$email."-vid-".$videoID)) {
mkdir("uploads/".$date."-".$email."-vid-".$videoID."/", 0777, true);
}
$imagecounter = 0;
$_FILES["file"] = array();
foreach ($_FILES["file"] as $file) {
$imagecounter++;
$filename = $_FILES["file"]["name"];
$file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
$file_ext = substr($filename, strripos($filename, '.')); // get file name
$filesize = $_FILES["file"]["size"];
$allowed_file_types = array('.jpg','.jpeg','.png','.gif');
if (in_array($file_ext,$allowed_file_types) && ($filesize < 200000))
{
// Rename file
$newfilename = "$imagecounter-".$file_basename . $file_ext;
if (file_exists("uploads/".$date."-".$email."-vid-".$videoID."/" . $newfilename))
{
// file already exists error
echo "You have already uploaded this file.";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/".$date."-".$email."-vid-".$videoID."/" . $newfilename);
echo "File uploaded successfully.";
}
}
答案 0 :(得分:0)
当你有数组中的文件时:
$i = 1;
foreach($_FILES['file'] as $file){
move_uploaded_file($file['tmp_name'], $i.'-'.$file['name']);
++$i;
}
答案 1 :(得分:0)
你的问题是$imagecounter
总是0,所以当你上传一个新文件时,它会获得已经上传的文件数量的值1(此请求中的一个文件)。
因此,请计算已在目标文件夹中上传的文件,并将此值增加+1,以使列表编号正常工作。
$uploadDir = "uploads/".$date."-".$email."-vid-".$videoID."/";
$fileInterator = new FilesystemIterator($uploadDir, FilesystemIterator::SKIP_DOTS);
$imagecounter = iterator_count($fileInterator);
但删除文件时要注意 - 例如你在文件夹中有这些文件:
并在仅计算文件数量(现在为2)时删除2-hello.png
,然后下一个上传的文件获取名称3-new.png
,此号码已由3-wow.png
{ p>