PHP无法上载多个图像


PHP cannot upload multiple images

我有一个表单,我想在其中最多上传五个图像。图像的名称和扩展名应该插入数据库表"images"中,然后上传到_uploads/name_of_The_album/目录。

问题是,当我选择一些图像并点击上传时,只有第一个图像上传正确,其他图像都失败了。

这是我的代码:

if(isset($_FILES['image']) === true){
    $files = $_FILES['image'];
    $allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
    $album_id = (int)$_GET['album_id'];
    $album_name = $_GET['album_name'];
    for($i=0; $i<count($files['name']); $i++){
        $name = $files['name'][$i];
        $tmp_name = $files['tmp_name'][$i];
        $size = $files['size'][$i];
        $ext = explode('.', $files['name'][$i]);
        $ext = strtolower(end($ext));
        $img_name = explode('.', $files['name'][$i]);
        $img_name = strtolower(current($img_name));
                    //do some testing echos to see the result
        //echo $img_name."<br>";
                     //here i'm going to add some validation as soon as
                     // i fix the multi-upload problem
        //insert image into database
        $query_insert_image = "INSERT INTO `images` (album_id, image_name, image_ext) VALUES ({$album_id}, '{$img_name}', '{$ext}') ";
        $insert_image = mysql_query($query_insert_image, $connection) or die(mysql_error());
        if(mysql_affected_rows() == 1){
            move_uploaded_file($tmp_name, '../_uploads/'.$album_name.'/'.$name);
        }
        //redirect
        redirect_to("view_album.php?succeed=1");
    }//end the for loop
    //echo '<pre>',print_r($files, true),'</pre>';
}

下面是表单的一些代码:

<form action="" method="post" enctype="multipart/form-data" name="formUploadImages" id="formUploadImages">
    <p>
        <label for="image">Choose one or more Image(s):</label><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" />
    </p>
......

你知道我做错了什么吗?

我认为你是在自食其力。

redirect_to("view_album.php?succeed=1");

重定向意味着刷新页面,这意味着执行结束。当在第一个for循环结束并且上传了第一个图像之后触发该重定向时,for将不会继续到下一次迭代。

当然,修复方法是在for循环之后推送该行(并且永远不要期望在重定向之后执行任何内容——除非已经发送了头)。

大多数执行redirect_to()功能的函数(它不是核心函数,它基于另一个函数header())也会确保执行停止(有一个调用header()的行和另一个调用die()/exit()的行)。

试试这个php代码,对我有用:

for($i=1;$i<6;$i++)
{
if(!empty($_FILES['image_upload'.$i])):
$target = "images/".$_FILES['image_upload'.$i]['name'];
$image_upload.= ",".mysql_real_escape_string(($_FILES['image_upload'.$i]['name']));
move_uploaded_file($_FILES['image_upload'.$i]['tmp_name'], $target);
endif;
}

在你的根目录中创建一个名为"images"的文件夹,所有的图像都会被移到这个文件夹中。html表单可能看起来像:

<form action="" method="post" enctype="multipart/form-data" name="formUploadImages" id="formUploadImages">
<p>
    <label for="image">Choose one or more Image(s):</label><br />
    <input type="file" name="image_upload1" id="image_upload1" /><br />
    <input type="file" name="image_upload2" id="image_upload2" /><br />
    <input type="file" name="image_upload3" id="image_upload3" /><br />
    <input type="file" name="image_upload4" id="image_upload4" /><br />
    <input type="file" name="image_upload5" id="image_upload5" />
</p>

这段代码是在我这边运行的,经过一些编辑后,根据您的需要可能会对您有用。编码快乐!

foreach($_POST['image']为$report_id){
$sql="插入images(album_id、image_name、image_ext)值('{$album_id}'、'{$report_id}'和'{$ext}')";$queryExe=mysql_query($sql);}

将此代码替换为"//将图像插入数据库"之后的代码。

http://php.net/manual/en/features.file-upload.multiple.php

读取警告块"由于PHP 5.2.12,max_file_loads配置…"。也许这就是问题所在。

还有一些很好的例子,也许你应该用foreach而不是for。

1)在web服务器的根文件夹中创建一个.htaccess文件。

2) 将以下代码放在.htaccess文件中并保存。

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200

现在,您可以使用html表单中的file字段和PHP中可用的move_uploaded_file()函数,以一种简单的方式上传高达20MB的文件大小。