sparecycle
sparecycle

Reputation: 2058

PHP: Uploading multiple images at the same time

I've created an HTML form that allows me to upload an image to a uniquely named directory (i.e. a combination of date/time/ip address). Now I'm trying to upload two images (eventually multiple). I've reproduced my "File 1" content and uniquely named it to "File 2". I quickly attached a "2" to every variable and post field. Here is my upload form HTML:

<!DOCTYPE html>
<html>
<body>

<form action="icanhazuploads.php" method="post" enctype="multipart/form-data">
Select image(s) to upload: <br /><br />
<input type="file" name="fileToUpload" class="fileToUpload"><br /><br />
<input type="file" name="fileToUpload2" class="fileToUpload2"><br /><br />
<input type="submit" name="submit">
</form>

</body>
</html> 

Pretty straight forward. Two upload fields and a submit button. Here is my PHP processor file:

<?php
// Display Errors
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

$ip = ip2long($_SERVER['REMOTE_ADDR']);
$datetime = date('YmdHis');  
$target_dir = "uploads/" . $datetime . $ip . "/";

// Create the unique diretory
if (!file_exists($target_dir)) {
    mkdir($target_dir, 0777, true);
}

// Start processing files

// File 1
echo "<br />1st file being added...<br />";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
echo "<br />Target File: " . $target_file. "<br />";
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".<br />";
        $uploadOk = 1;
    } else {
        echo "File is not an image.<br />";
        $uploadOk = 0;
    }
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Your file was not uploaded.<br />";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.<br />";
    } else {
        echo "There was an error uploading your file.<br />";
    }
}



// File 2
if(isset($_POST["fileToUpload2"])) {
echo "<br />2nd file being added...<br />";
$target_file2 = $target_dir . basename($_FILES["fileToUpload2"]["name"]);
echo "<br />Target File: " . $target_file2. "<br />";
$uploadOk = 1;
$imageFileType = pathinfo($target_file2,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload2"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".<br />";
        $uploadOk = 1;
    } else {
        echo "File is not an image.<br />";
        $uploadOk = 0;
    }
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Your file was not uploaded.<br />";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload2"]["tmp_name"], $target_file2)) {
        echo "The file ". basename( $_FILES["fileToUpload2"]["name"]). " has been uploaded.<br />";
    } else {
        echo "There was an error uploading your file.<br />";
    }
}

Truly magical. I pull up my HTML form in the browser, select two images and hit submit. I can watch with Firebug or Chrome's inspector and see it with the two image fields populated via POST. However, my PHP file will consistently only see one. If I put my image only in the second field in my form, it still just acts as if I placed it in the first field. No errors in error log. Any idea why it refuses to see more than one file?

My php.ini settings:

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 64M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

Upvotes: 1

Views: 1291

Answers (1)

rjdown
rjdown

Reputation: 9227

if(isset($_POST["fileToUpload2"])) {

This is wrong, it will never be set.

Try

if(isset($_FILES["fileToUpload2"])) {

For future debugging, use var_dump($_POST); and var_dump($_FILES); and you'll instantly see what's going on

Upvotes: 2

Related Questions