Your script should have a line of the type: $uploadedFiles = $_FILES["file"]; where the name “file” must be the string used in formData.append(‘file[]‘, files[i]). (Careful not to mix up the singular with the plural – poor choice of similar variable names!) 4. All left to do in your script is the same as if you were doing a “regular” multiple file upload, i.e. the kind you would do with . Essentially, looping over the arrays inside the variable $uploadedFiles , and moving the uploaded files from your server’s temporary folder to your desired destination – for example by means of the PHP function move_uploaded_file Julian says January 19, 2013 at 10:00 am # Oops, in my line 4, above, I meant to say: the kind you would do with <INPUT type=’file’ name=’file[]‘> Julian says January 19, 2013 at 10:08 am # Here is the function I use for the multiple uploads. You invoke it as: uploadMultipleFiles($uploadedFiles , “full_destination_path/”): function uploadMultipleFiles($upload_fileset_info, $dest_dir, $verbose = false) /* Attempt to upload multiple files to the specified destination directory (which should end with a "/"). The file names are not altered. */ { $number_successful_uploads = 0; // Loop over the "error" array, and extract the corresponding info (with the same index offset) in the other 4 arrays foreach ($upload_fileset_info["error"] as $index => $status_code) { $name = $upload_fileset_info["name"][$index]; if ($name == "") { continue; // If no upload file was given, skip to the next entry } $type = $upload_fileset_info["type"][$index]; $tmp_name = $upload_fileset_info["tmp_name"][$index]; $size = $upload_fileset_info["size"][$index]; if ($status_code == UPLOAD_ERR_OK) { // If upload was successful $dest_filename = $name; $dest_full_path = $dest_dir . $dest_filename; // Move the temporary upload file to its desired destination on the server move_uploaded_file($tmp_name, "$dest_full_path") or die("ERROR: Couldn't copy the file to the desired destination."); $number_successful_uploads += 1; } else { // If upload didn't succeed, spell out the nature of the problem echo "Upload FAILED"; } } return $number_successful_uploads; } Corey says February 8, 2013 at 11:40 pm # Julian Thank you for your extra code provided, it’s exactly what I needed as someone who doesn’t know much about php and especially file uploads. I was struggling with getting your code to work though, and I finally got it to work by changing: move_uploaded_file($tmp_name, "$dest_full_path") to move_uploaded_file($tmp_name, $dest_full_path) Honestly not sure if this is how you are supposed to do it, but it works for me.