重命名上传的文件

时间:2014-07-17 11:48:22

标签: php foreach upload rename

我通过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.";     
            }
        }

2 个答案:

答案 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);

但删除文件时要注意 - 例如你在文件夹中有这些文件:

  • 1-test.png
  • 2- hello.png
  • 3- wow.png

并在仅计算文件数量(现在为2)时删除2-hello.png,然后下一个上传的文件获取名称3-new.png,此号码已由3-wow.png