PHP使用随机名称上传多个文件

时间:2018-04-04 12:25:00

标签: php file-upload

使用多个输入文件上传图像时,我遇到设置文件名的问题。

$total = count($_FILES['image']['name']);

for($i=0; $i<$total; $i++)
{
    $tmpFilePath = $_FILES['image']['tmp_name'][$i];

    if($tmpFilePath != "")
    {
        $info1 = pathinfo($_FILES['image']['name'][$i]);
        $ext = $info1['extension'];
        $newname1 = "CALIBRATION_.".$ext; 

        $newFilePath = "../assets/img/product/" . $newname1[$i];

        if(move_uploaded_file($tmpFilePath, $newFilePath)){}
    }
}

这是PHP:

Release1.0

当我尝试运行代码时,它显示错误的名称&amp;类型。你可以在下面看到截图。

enter image description here

我想要的是在上传后使用正确的名称和文件类型重命名文件。

4 个答案:

答案 0 :(得分:3)

您将$ newname1作为数组访问,这不是您想要的。另外,你错过了你的名字随机。

尝试做

$total = count($_FILES['image']['name']);

for($i=0; $i<$total; $i++)
{
    $tmpFilePath = $_FILES['image']['tmp_name'][$i];

    if($tmpFilePath != "")
    {
        $info1 = pathinfo($_FILES['image']['name'][$i]);
        $ext = $info1['extension'];
        $newname1 = "CALIBRATION_" . rand(10000,99999) . "." . $ext; 

        $newFilePath = "../assets/img/product/" . $newname1;

        if(move_uploaded_file($tmpFilePath, $newFilePath)){}
    }
}

答案 1 :(得分:1)

从此行[$i]移除$newname1[$i]。这将创建一个字符串数组,因此文件的名称将是单个字符。添加rand()或添加任何唯一编号以获取文件的唯一名称

    $newname1 = "CALIBRATION_".rand(1000, 9999).".".$ext; 

    $newFilePath = "../assets/img/product/" . $newname1;

答案 2 :(得分:1)

$newname1是字符串而不是数组。如果要使用新名称连接$i值,可以像下面的代码

那样进行
if($tmpFilePath != "")
{
    $info1 = pathinfo($_FILES['image']['name'][$i]);
    $ext = $info1['extension'];
    $newname1 = "CALIBRATION_".$i.".".$ext; 

    $newFilePath = "../assets/img/product/" . $newname1;

    if(move_uploaded_file($tmpFilePath, $newFilePath)){}
}

答案 3 :(得分:1)

您需要从此行中删除dpad(x, 2) # [,1] [,2] # [1,] "2017-06-30" NA # [2,] "2017-07-31" NA # [3,] "2017-08-31" "1" # [4,] "2017-09-30" "2" # [5,] "2017-10-31" "3" # [6,] "2017-11-30" "4" # [7,] "2017-12-31" "5" # [8,] "2018-01-31" "6" # [9,] "2018-02-28" "7" # [10,] "2018-03-31" "8" # [11,] "2018-04-30" "9" # [12,] "2018-05-31" "10" 才能获取全名,而不仅仅是文件名的[$i]个字符:

$i

如果要生成具有原始名称和扩展名但以$newFilePath = "../assets/img/product/" . $newname1[$i]; 为前缀而不是随机数的新文件名,则可以使用两个版本:

CALIBRATION_.
  

如果您只使用一次变量,则不需要创建变量,如代码中的$newname1 = "CALIBRATION_" . $info1['basename']; // or $newname1 = "CALIBRATION_" . $info1['filename'] . '.' . $info1['extension']; 。在这里,您可以使用$ext,其中包含$info1dirnamebasenamefilename