PHP将每个多个上传的文件分配给变量


PHP assign each multiple uploaded files to variable

如何将多个上传的文件($new_file_name)从sql查询过程的foreach循环中分离出来?如何分配每个文件到它的变量?

// manipulate uploaded images
if(isset($_FILES['files'])){
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){
        $file_name = $key.'_'.$_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];
        //explode fine name and extension
        $ext_x = explode('.', $_FILES['files']['name'][$key]);
        $ext = strtolower(end($ext_x));
        $file_name = str_replace('.'.$ext, '', $_FILES['files']['name'][$key]);
        //new file name
        $output_dir = '../items/'.$list_id;
        $new_file_name = rand(1, 999999).'.'.$ext;
        $pathfile = $output_dir.'/'.$new_file_name;
        // create directory if does not exist
        if(is_dir($output_dir) == false){
            mkdir($output_dir, 0700);
        }
        if(is_dir($pathfile) == false){
            if(move_uploaded_file($file_tmp, $pathfile)){
                //resize original image
                WideImage::load($pathfile)->resize(300, 400)->saveToFile($pathfile);
                //generate thumbnail
                $split = explode('.', $new_file_name);
                $thumb = $split[0].'_t.'.$split[1];
                WideImage::load($pathfile)->resize(70, 70)->saveToFile($output_dir.'/'.$thumb);
            }
        }
    }
}
//here I needed to get each of the uploaded images to update database (max 3 images)
//how to explode above $new_file_name into variable here?
$new_file_name1 = $new_file_name[0]; //and so on...
$q = $mysqli->query("UPDATE `listing` SET image1='".$new_file_name1."', image2='".$new_file_name2."', image3='".$new_file_name3."', thumbnail='".$thumb1."', WHERE list_id='".$list_id."' AND user_id='".$user_id."'") or die($mysqli->error);

我可以通过

得到每个文件
$var0 = $_FILES['files']['name'][0];
$var1 = $_FILES['files']['name'][1];
$var2 = $_FILES['files']['name'][2];

但我不能

$var0 = $new_file_name[0];
$var1 = $new_file_name[1];
$var2 = $new_file_name[2];

谢谢你的建议!

设置名称:

$new_file_name[] = rand(1, 999999).'.'.$ext;

和for循环内使用:

end($new_file_name)

表示当前文件。例句:

    $pathfile = $output_dir.'/'.end($new_file_name);

您遇到的问题是因为在通过循环的每次迭代中,您将$new_file_name设置为一个新的随机字符串。通过使用$new_file_name[],您将一个元素添加到$new_file_name,然后成为一个数组。使用end()函数返回数组的最后一个元素,因此在当前循环的迭代中,它将返回与当前文件对应的最后添加的随机字符串;

编辑:

// manipulate uploaded images
if(isset($_FILES['files'])){
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){
    $file_name = $key.'_'.$_FILES['files']['name'][$key];
    $file_size = $_FILES['files']['size'][$key];
    $file_tmp = $_FILES['files']['tmp_name'][$key];
    $file_type = $_FILES['files']['type'][$key];
    //explode fine name and extension
    $ext_x = explode('.', $_FILES['files']['name'][$key]);
    $ext = strtolower(end($ext_x));
    $file_name = str_replace('.'.$ext, '', $_FILES['files']['name'][$key]);
    //new file name
    $output_dir = '../items/'.$list_id;
    $new_file_name[] = rand(1, 999999).'.'.$ext;
    $pathfile = $output_dir.'/'.end($new_file_name);
    // create directory if does not exist
    if(is_dir($output_dir) == false){
        mkdir($output_dir, 0700);
    }
    if(is_dir($pathfile) == false){
        if(move_uploaded_file($file_tmp, $pathfile)){
            //resize original image
            WideImage::load($pathfile)->resize(300, 400)->saveToFile($pathfile);
            //generate thumbnail
            $split = explode('.', end($new_file_name));
            $thumb = $split[0].'_t.'.$split[1];
            WideImage::load($pathfile)->resize(70, 70)->saveToFile($output_dir.'/'.$thumb);
        }
    }
}
}
//Getting the variables
$new_file_name1 = $new_file_name[0]; //and so on...
$q = $mysqli->query("UPDATE `listing` SET image1='".$new_file_name1."', image2='".$new_file_name2."', image3='".$new_file_name3."', thumbnail='".$thumb1."', WHERE list_id='".$list_id."' AND user_id='".$user_id."'") or die($mysqli->error);

您也可以在SQL查询中使用:$new_file_name[0]