Administrators Nathan Posted December 12, 2013 Administrators Share Posted December 12, 2013 I was looking for a decent file upload script the other day that does some error checking. Found this one pretty useful, so figured I would share. <?php // RAY_upload_example.php error_reporting(E_ALL); // MANUAL REFERENCE PAGES YOU MUST UNDERSTAND TO UPLOAD FILES // http://php.net/manual/en/reserved.variables.files.php // 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/function.getimagesize.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.php date_default_timezone_set('America/Chicago'); // ESTABLISH THE NAME OF THE DESTINATION FOLDER ('uploads' DIRECTORY) $uploads = 'RAY_junk'; if (!is_dir($uploads)) { mkdir($uploads); } // 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 INPUT if (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 SCRIPT else { // 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 } } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.