多次上传,仅上传最后一个文件

时间:2013-11-23 16:27:19

标签: php upload

我目前正在开展一个网站项目,需要在同一表单中上传多张图片。

提交表单时,只上传最后一张图片,我无法弄清楚原因。我一直在寻找谷歌,这个网站和其他许多人的答案,但我找不到有完全相同问题的人找到解决方案。

我已经使用WAMP和在线测试了这个基本代码,问题仍然存在......

以下是表格:

<form action="index.php?action=add" method="post" enctype="multipart/form-data">
<input type="file" name="file1"/><br/>
<input type="file" name="file2"/><br/>
<input type="file" name="file3"/><br/>
<input type="hidden" name="add" value="1"/>
<input type="submit" value="ok"/>

以下是我用于上传的代码:

function move_avatar($avatar)
{
    $extension_upload = strtolower(substr(  strrchr($avatar['name'], '.')  ,1));
    $name = time();
    $nomavatar = str_replace(' ','',$name).".".$extension_upload;
    $name = "images/".str_replace(' ','',$name).".".$extension_upload;
    move_uploaded_file($avatar['tmp_name'],$name);
    return $nomavatar;
}
if(!empty($_POST['add'])){
    for($i=1;$i<=3;$i++){
        if(!empty($_FILES['file'.$i]['size'])){
            $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' );           
            $extension_upload = strtolower(substr(strrchr($_FILES['file'.$i]['name'], '.')  ,1));
            if(in_array($extension_upload,$extensions_valides))     
            $img =(!empty($_FILES['file'.$i]['size']))?move_avatar($_FILES['file'.$i]):'';
            else $img = 'defaultImg.png';
        }else $img = 'defaultImg.png';
    }
    print_r($_POST);
}else include('test.php');

有什么想法吗? :/

1 个答案:

答案 0 :(得分:0)

来自Facebook的Caroline!

即使您在Facebook上阅读我的答案,我也会发布此答案以表明此问题已得到解决。

测试完脚本后,我发现了什么问题。 问题出在您的函数中,您声明$ name变量:

$name = time();

当您同时上传多张照片时,它们都具有相同的时间戳,因此名称相同!这就是为什么只发送最后一张图片!

为了解决这个问题,我在你的函数中添加了一个参数,以便添加一个使文件名彼此不同的数字:

function move_avatar($avatar,$number)

然后我将这个新变量添加到第一个$ name变量:

    $name = time().$number;

最后,我在使用函数时使用$ i变量:

                $img =(!empty($_FILES['file'.$i]['size']))?move_avatar($_FILES['file'.$i],$i):'';

通过这些修改,所有上传的图像现在都有一个不同的名称,最后一个数字是不同的。