简体   繁体   中英

Problem uploading multiple files

Here's the code I'm using. I can't seem to see where the problem is - its meant to upload multiple files at out ones. The funny thing is that some times it uploads just one file, and then won't upload anything.

Can someone help me look into it please..

<pre><code>
<?php

/*** the upload directory ***/
$upload_dir= './uploads';

/*** numver of files to upload ***/
$num_uploads = 5;

/*** maximum filesize allowed in bytes ***/
$max_file_size  = 999999951200;

/*** the maximum filesize from php.ini ***/
$ini_max = str_replace('M', '', ini_get('upload_max_filesize'));
$upload_max = $ini_max * 99999991024;

/*** a message for users ***/
$msg = 'Please select files for uploading';

/*** an array to hold messages ***/
$messages = array();

/*** check if a file has been submitted ***/
if(isset($_FILES['userfile']['tmp_name']))
{
    /** loop through the array of files ***/
    for($i=0; $i < count($_FILES['userfile']['tmp_name']);$i++)
    {
        // check if there is a file in the array
        if(!is_uploaded_file($_FILES['userfile']['tmp_name'][$i]))
        {
            $messages[] = 'No file uploaded';
        }
        /*** check if the file is less then the max php.ini size ***/
        elseif($_FILES['userfile']['size'][$i] > $upload_max)
        {
            $messages[] = "File size exceeds $upload_max php.ini limit";
        }
        // check the file is less than the maximum file size
        elseif($_FILES['userfile']['size'][$i] > $max_file_size)
        {
            $messages[] = "File size exceeds $max_file_size limit";
        }
        else
        {
            // copy the file to the specified dir 
            if(@copy($_FILES['userfile']['tmp_name'][$i],$upload_dir.'/'.$_FILES['userfile']['name'][$i]))
            {
                /*** give praise and thanks to the php gods ***/
                $messages[] = $_FILES['userfile']['name'][$i].' uploaded';
            }
            else
            {
                /*** an error message ***/
                $messages[] = 'Uploading '.$_FILES['userfile']['name'][$i].' Failed';
            }
        }
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Multiple File Upload</title>
</head>

<body>

<h3><?php echo $msg; ?></h3>

<p>
<?php
 if(sizeof($messages) != 0)
 {
    foreach($messages as $err)
    {
        echo $err.'<br />';
    }
 }
?>
</p>

<form enctype="multipart/form-data" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $upload_max; ?>" />
<?php
$num = 0;
while($num < $num_uploads)
{
    echo '<div><input name="userfile[]" type="file" /></div>';
    $num++;
}
?>
<input type="submit" value="Upload" />
</form>

</body>
</html>

</code></pre>

First of all don't use copy() to move the files. There is a function for this called move_uploaded_file() This function checks if the file was really uploaded and prevents moving files that aren't supposed to be moved.

2nd. Look at the error value of each file uploaded, since you could be triggering some errors on upload.

Update.

Try cutting your solution down to its bare bones. Skip the error reporting until you have it working. It will help you know what the exact meat and potatoes of the code is and helps you get that part working well before you work around the possible errors.

2nd Update.

Here's a minimized version of your code. It works for me.

http://cznp.com/1032712.phps

What I had to do also is make the folder I am writing do writable for my web server.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM