<?php//places files into same dir as form residesforeach ($_FILES["files"]["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { echo"$error_codes[$error]"; move_uploaded_file( $_FILES["files"]["tmp_name"][$key], $_FILES["files"]["name"][$key] ) or die("Problems with upload"); }}?>
Not sure I understand the requirement, but this will let you upload several files. See line 26-27.
<?php // RAY_upload_example.phperror_reporting(E_ALL);// MANUAL REFERENCE PAGES YOU MUST UNDERSTAND TO UPLOAD FILES// http://php.net/manual/en/features.file-upload.php// http://php.net/manual/en/features.file-upload.common-pitfalls.php// http://php.net/manual/en/function.move-uploaded-file.php// http://php.net/manual/en/reserved.variables.files.php// MANUAL PAGES THAT ARE IMPORTANT IF YOU ARE DEALING WITH LARGE FILES// http://php.net/manual/en/ini.core.php#ini.upload-max-filesize// http://php.net/manual/en/ini.core.php#ini.post-max-size// http://php.net/manual/en/info.configuration.php#ini.max-input-time// PHP 5.1+ SEE http://php.net/manual/en/function.date-default-timezone-set.phpdate_default_timezone_set('America/Chicago');// ESTABLISH THE NAME OF THE 'uploads' DIRECTORY (MUST ALREADY EXIST)$uploads = 'RAY_junk';// ESTABLISH THE BIGGEST FILE SIZE WE CAN ACCEPT - ABOUT 8 MB$max_file_size = '8000000';// ESTABLISH THE MAXIMUM NUMBER OF FILES WE CAN UPLOAD$nf = 3;// ESTABLISH THE KINDS OF FILE EXTENSIONS WE CAN ACCEPT$file_exts = array( 'jpg', 'gif', 'png', 'txt', 'pdf');// LIST OF THE ERRORS THAT MAY BE REPORTED IN $_FILES[]["error"] (THERE IS NO #5)$errors = array( 0 => "Success!", 1 => "The uploaded file exceeds the upload_max_filesize directive in php.ini", 2 => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", 3 => "The uploaded file was only partially uploaded", 4 => "No file was uploaded", 5 => "UNDEFINED ERROR", 6 => "Missing a temporary folder", 7 => "Cannot write file to disk");// IF THERE IS NOTHING IN $_POST, PUT UP THE FORM FOR INPUTif (empty($_POST)){ ?> <h2>Upload <?php echo $nf; ?> file(s)</h2> <!-- SOME THINGS TO NOTE ABOUT THIS FORM... ENCTYPE IN THE HTML <FORM> STATEMENT MAX_FILE_SIZE MUST PRECEDE THE FILE INPUT FIELD INPUT NAME= IN TYPE=FILE DETERMINES THE NAME YOU FIND IN $_FILES ARRAY ABSENCE OF ACTION= ATTRIBUTE IN FORM TAG CAUSES POST TO SAME URL --> <form name="UploadForm" enctype="multipart/form-data" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size; ?>" /> <p> Find the file(s) you want to upload and click the "Upload" button below. </p> <?php // CREATE INPUT STATEMENTS FOR UP TO $n FILE NAMES for ($n = 0; $n < $nf; $n++) { echo "<input name=\"userfile$n\" type=\"file\" size=\"80\" /><br/>\n"; } ?> <br/>Check this box <input autocomplete="off" type="checkbox" name="overwrite" /> to <strong>overwrite</strong> existing files. <input type="submit" value="Upload" /> </form> <?php die();}// END OF THE FORM SCRIPT// WE HAVE GOT SOMETHING IN $_POST - RUN THE ACTION SCRIPTelse{ // THERE IS POST DATA - PROCESS IT echo "<h2>Results: File Upload</h2>\n"; // ACTIVATE THIS TO SEE WHAT IS COMING THROUGH // echo "<pre>"; var_dump($_FILES); var_dump($_POST); echo "</pre>\n"; // ITERATE OVER THE CONTENTS OF $_FILES foreach ($_FILES as $my_uploaded_file) { // SKIP OVER EMPTY SPOTS - NOTHING UPLOADED $error_code = $my_uploaded_file["error"]; if ($error_code == 4) continue; // SYNTHESIZE THE NEW FILE NAME $f_type = trim(strtolower(end (explode( '.', basename($my_uploaded_file['name'] ))))); $f_name = trim(strtolower(current(explode( '.', basename($my_uploaded_file['name'] ))))); $my_new_file = getcwd() . DIRECTORY_SEPARATOR . $uploads . DIRECTORY_SEPARATOR . $f_name . '.' . $f_type ; $my_file = $uploads . DIRECTORY_SEPARATOR . $f_name . '.' . $f_type; // OPTIONAL TEST FOR ALLOWABLE EXTENSIONS if (!in_array($f_type, $file_exts)) die("Sorry, $f_type files not allowed"); // IF THERE ARE ERRORS if ($error_code != 0) { $error_message = $errors[$error_code]; die("Sorry, Upload Error Code: $error_code: $error_message"); } // GET THE FILE SIZE $file_size = number_format($my_uploaded_file["size"]); // IF THE FILE IS NEW (DOES NOT EXIST) if (!file_exists($my_new_file)) { // IF THE MOVE FUNCTION WORKED CORRECTLY if (move_uploaded_file($my_uploaded_file['tmp_name'], $my_new_file)) { $upload_success = 1; } // IF THE MOVE FUNCTION FAILED else { $upload_success = -1; } } // IF THE FILE ALREADY EXISTS else { echo "<br/><b><i>$my_file</i></b> already exists.\n"; // SHOULD WE OVERWRITE THE FILE? IF NOT if (empty($_POST["overwrite"])) { $upload_success = 0; } // IF WE SHOULD OVERWRITE THE FILE, TRY TO MAKE A BACKUP else { $now = date('Y-m-d'); $my_bak = $my_new_file . '.' . $now . '.bak'; if (!copy($my_new_file, $my_bak)) { echo "<br/><strong>Attempted Backup Failed!</strong>\n"; } if (move_uploaded_file($my_uploaded_file['tmp_name'], $my_new_file)) { $upload_success = 2; } else { $upload_success = -1; } } } // REPORT OUR SUCCESS OR FAILURE if ($upload_success == 2) { echo "<br/>It has been overwritten.\n"; } if ($upload_success == 1) { echo "<br/><strong>$my_file</strong> has been saved.\n"; } if ($upload_success == 0) { echo "<br/><strong>It was NOT overwritten.</strong>\n"; } if ($upload_success < 0) { echo "<br/><strong>ERROR: $my_file NOT SAVED - SEE WARNING FROM move_uploaded_file() COMMAND</strong>\n"; } if ($upload_success > 0) { echo "$file_size bytes uploaded.\n"; if (!chmod ($my_new_file, 0755)) { echo "<br/>chmod(0755) FAILED: fileperms() = "; echo substr(sprintf('%o', fileperms($my_new_file)), -4); } echo "<br/><a target=\"_blank\" href=\"$my_file\">See the file $my_file</a>\n"; } // END FOREACH ITERATOR - EACH ITERATION PROCESSES ONE FILE }}
Is it possible to upload all files from a folder with one click?
Ray Paseur
Probably not. For security reasons, the server-side script cannot prepopulate the $_FILES array. Think about it ... If the server could do that, a server could use a combination of JS and server scripting to steal files from any computer that visited the web site.
You are right. I did not realize what i was asking. I just need a script that adds a number of input fields to the form by clicking a button, this way i wont have to reload the form or edit the source to get the exact number of fields needed for every upload.
Open in new window