欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php文件上传类与实例(单文件上传、多文件上传)

程序员文章站 2022-05-26 20:34:32
...
本文分享一个不错的php文件上传,可以实现单个文件的上传、多个文件的上传功能。有需要的朋友参考下吧。

1,php文件上传类

language = "en"; // choice of en, nl, es
  $this->rename_file = false;
  $this->ext_string = "";
 }
 function show_error_string() {
  $msg_string = "";
  foreach ($this->message as $value) {
   $msg_string .= $value."
\n"; } return $msg_string; } function set_file_name($new_name = "") { // this "conversion" is used for unique/new filenames if ($this->rename_file) { if ($this->the_file == "") return; $name = ($new_name == "") ? strtotime("now") : $new_name; $name = $name.$this->get_extension($this->the_file); } else { $name = $this->the_file; } return $name; } function upload($to_name = "") { $new_name = $this->set_file_name($to_name); if ($this->check_file_name($new_name)) { if ($this->validateExtension()) { if (is_uploaded_file($this->the_temp_file)) { $this->file_copy = $new_name; if ($this->move_upload($this->the_temp_file, $this->file_copy)) { $this->message[] = $this->error_text($this->http_error); if ($this->rename_file) $this->message[] = $this->error_text(16); return true; } } else { $this->message[] = $this->error_text($this->http_error); return false; } } else { $this->show_extensions(); $this->message[] = $this->error_text(11); return false; } } else { return false; } } function check_file_name($the_name) { if ($the_name != "") { if (strlen($the_name) > $this->max_length_filename) { $this->message[] = $this->error_text(13); return false; } else { if ($this->do_filename_check == "y") { if (preg_match("/^[a-z0-9_]*\.(.){1,5}$/i", $the_name)) { return true; } else { $this->message[] = $this->error_text(12); return false; } } else { return true; } } } else { $this->message[] = $this->error_text(10); return false; } } function get_extension($from_file) { $ext = strtolower(strrchr($from_file,".")); return $ext; } function validateExtension() { $extension = $this->get_extension($this->the_file); $ext_array = $this->extensions; if (in_array($extension, $ext_array)) { // check mime type hier too against allowed/restricted mime types (boolean check mimetype) return true; } else { return false; } } // this method is only used for detailed error reporting function show_extensions() { $this->ext_string = implode(" ", $this->extensions); } function move_upload($tmp_file, $new_file) { umask(0); if ($this->existing_file($new_file)) { $newfile = $this->upload_dir.$new_file; if ($this->check_dir($this->upload_dir)) { if (move_uploaded_file($tmp_file, $newfile)) { if ($this->replace == "y") { //system("chmod 0777 $newfile"); // maybe you need to use the system command in some cases... chmod($newfile , 0777); } else { // system("chmod 0755 $newfile"); chmod($newfile , 0755); } return true; } else { return false; } } else { $this->message[] = $this->error_text(14); return false; } } else { $this->message[] = $this->error_text(15); return false; } } function check_dir($directory) { if (!is_dir($directory)) { if ($this->create_directory) { umask(0); mkdir($directory, 0777); return true; } else { return false; } } else { return true; } } function existing_file($file_name) { if ($this->replace == "y") { return true; } else { if (file_exists($this->upload_dir.$file_name)) { return false; } else { return true; } } } function get_uploaded_file_info($name) { $str = "File name: ".basename($name)."\n"; $str .= "File size: ".filesize($name)." bytes\n"; if (function_exists("mime_content_type")) { $str .= "Mime type: ".mime_content_type($name)."\n"; } if ($img_dim = getimagesize($name)) { $str .= "Image dimensions: x = ".$img_dim[0]."px, y = ".$img_dim[1]."px\n"; } return $str; } // this method was first located inside the foto_upload extension function del_temp_file($file) { $delete = @unlink($file); clearstatcache(); if (@file_exists($file)) { $filesys = eregi_replace("/","\\",$file); $delete = @system("del $filesys"); clearstatcache(); if (@file_exists($file)) { $delete = @chmod ($file, 0775); $delete = @unlink($file); $delete = @system("del $filesys"); } } } // some error (HTTP)reporting, change the messages or remove options if you like. function error_text($err_num) { switch ($this->language) { case "nl": $error[0] = "Foto succesvol kopieert."; $error[1] = "Het bestand is te groot, controlleer de max. toegelaten bestandsgrootte."; $error[2] = "Het bestand is te groot, controlleer de max. toegelaten bestandsgrootte."; $error[3] = "Fout bij het uploaden, probeer het nog een keer."; $error[4] = "Fout bij het uploaden, probeer het nog een keer."; $error[10] = "Selecteer een bestand."; $error[11] = "Het zijn alleen bestanden van dit type toegestaan: ".$this->ext_string.""; $error[12] = "Sorry, de bestandsnaam bevat tekens die niet zijn toegestaan. Gebruik alleen nummer, letters en het underscore teken.
Een geldige naam eindigt met een punt en de extensie."; $error[13] = "De bestandsnaam is te lang, het maximum is: ".$this->max_length_filename." teken."; $error[14] = "Sorry, het opgegeven directory bestaat niet!"; $error[15] = "Uploading ".$this->the_file."...Fout! Sorry, er is al een bestand met deze naam aanwezig."; $error[16] = "Het gekopieerde bestand is hernoemd naar ".$this->file_copy."."; break; case "de": $error[0] = "Die Datei: ".$this->the_file." wurde hochgeladen!"; $error[1] = "Die hochzuladende Datei ist gr??er als der Wert in der Server-Konfiguration!"; $error[2] = "Die hochzuladende Datei ist gr??er als der Wert in der Klassen-Konfiguration!"; $error[3] = "Die hochzuladende Datei wurde nur teilweise ?bertragen"; $error[4] = "Es wurde keine Datei hochgeladen"; $error[10] = "W?hlen Sie eine Datei aus!."; $error[11] = "Es sind nur Dateien mit folgenden Endungen erlaubt: ".$this->ext_string.""; $error[12] = "Der Dateiname enth?lt ung?ltige Zeichen. Benutzen Sie nur alphanumerische Zeichen f?r den Dateinamen mit Unterstrich.
Ein g?ltiger Dateiname endet mit einem Punkt, gefolgt von der Endung."; $error[13] = "Der Dateiname ?berschreitet die maximale Anzahl von ".$this->max_length_filename." Zeichen."; $error[14] = "Das Upload-Verzeichnis existiert nicht!"; $error[15] = "Upload ".$this->the_file."...Fehler! Eine Datei mit gleichem Dateinamen existiert bereits."; $error[16] = "Die hochgeladene Datei ist umbenannt in ".$this->file_copy."."; break; // // place here the translations (if you need) from the directory "add_translations" // default: // start http errors $error[0] = "File: ".$this->the_file." successfully uploaded!"; $error[1] = "The uploaded file exceeds the max. upload filesize directive in the server configuration."; $error[2] = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form."; $error[3] = "The uploaded file was only partially uploaded"; $error[4] = "No file was uploaded"; // end http errors $error[10] = "Please select a file for upload."; $error[11] = "Only files with the following extensions are allowed: ".$this->ext_string.""; $error[12] = "Sorry, the filename contains invalid characters. Use only alphanumerical chars and separate parts of the name (if needed) with an underscore.
A valid filename ends with one dot followed by the extension."; $error[13] = "The filename exceeds the maximum length of ".$this->max_length_filename." characters."; $error[14] = "Sorry, the upload directory doesn't exist!"; $error[15] = "Uploading ".$this->the_file."...Error! Sorry, a file with this name already exitst."; $error[16] = "The uploaded file is renamed to ".$this->file_copy."."; } return $error[$err_num]; } } ?>

2,单文件上传的例子:

upload_dir = $_SERVER['DOCUMENT_ROOT']."/files/new/"; // "files" is the folder for the uploaded files (you have to create this folder) 
$my_upload->extensions = array(".png", ".zip", ".pdf"); // specify the allowed extensions here 
// $my_upload->extensions = "de"; // use this to switch the messages into an other language (translate first!!!) 
$my_upload->max_length_filename = 50; // change this value to fit your field length in your database (standard 100) 
$my_upload->rename_file = true; 
         
if(isset($_POST['Submit'])) { 
    $my_upload->the_temp_file = $_FILES['upload']['tmp_name']; 
    $my_upload->the_file = $_FILES['upload']['name']; 
    $my_upload->http_error = $_FILES['upload']['error']; 
    $my_upload->replace = (isset($_POST['replace'])) ? $_POST['replace'] : "n"; // because only a checked checkboxes is true 
    $my_upload->do_filename_check = (isset($_POST['check'])) ? $_POST['check'] : "n"; // use this boolean to check for a valid filename 
    $new_name = (isset($_POST['name'])) ? $_POST['name'] : ""; 
    if ($my_upload->upload($new_name)) { // new name is an additional filename information, use this to rename the uploaded file 
        $full_path = $my_upload->upload_dir.$my_upload->file_copy; 
        $info = $my_upload->get_uploaded_file_info($full_path); 
        // ... or do something like insert the filename to the database 
    } 
} 
?>  
 
 
 
php文件上传的例子-bbs.it-home.org

php文件上传:

Max. filesize = bytes.



(without extension!)



show_error_string(); ?>

".nl2br($info).""; ?>

3,多文件上传的例子

language) { 
            case "de": 
            // add you translations here 
            break; 
            default: 
            $extra_msg[1] = "Error for: ".$this->the_file.""; 
            $extra_msg[2] = "You have tried to upload ".$this->wrong_extensions." files with a bad extension, the following extensions
 are allowed: ".$this->ext_string.""; 
            $extra_msg[3] = "Select at least on file."; 
            $extra_msg[4] = "Select the file(s) for upload."; 
            $extra_msg[5] = "You have tried to upload ".$this->bad_filenames." files with invalid characters inside the filename."; 
        } 
        return $extra_msg[$msg_num]; 
    } 
    // this method checkes the number of files for upload 
    // this example works with one or more files 
    function count_files() { 
        foreach ($this->names_array as $test) { 
            if ($test != "") { 
                $this->number_of_files++; 
            } 
        } 
        if ($this->number_of_files > 0) { 
            return true; 
        } else { 
            return false; 
        }  
    } 
    function upload_multi_files () { 
        $this->message = ""; 
        if ($this->count_files()) { 
            foreach ($this->names_array as $key => $value) {  
                if ($value != "") { 
                    $this->the_file = $value; 
                    $new_name = $this->set_file_name(); 
                    if ($this->check_file_name($new_name)) { 
                        if ($this->validateExtension()) { 
                            $this->file_copy = $new_name; 
                            $this->the_temp_file = $this->tmp_names_array[$key]; 
                            if (is_uploaded_file($this->the_temp_file)) { 
                                if ($this->move_upload($this->the_temp_file, $this->file_copy)) { 
                                    $this->message[] = $this->error_text($this->error_array[$key]); 
                                    if ($this->rename_file) $this->message[] = $this->error_text(16); 
                                    sleep(1); // wait a seconds to get an new timestamp (if rename is set) 
                                } 
                            } else { 
                                $this->message[] = $this->extra_text(1); 
                                $this->message[] = $this->error_text($this->error_array[$key]); 
                            } 
                        } else { 
                            $this->wrong_extensions++; 
                        } 
                    } else { 
                        $this->bad_filenames++; 
                    } 
                }  
            } 
            if ($this->bad_filenames > 0) $this->message[] = $this->extra_text(5); 
            if ($this->wrong_extensions > 0) { 
                $this->show_extensions(); 
                $this->message[] = $this->extra_text(2); 
            } 
        } else { 
            $this->message[] = $this->extra_text(3); 
        } 
    } 
} 

$multi_upload = new muli_files; 

$multi_upload->upload_dir = $_SERVER['DOCUMENT_ROOT']."/files/"; // "files" is the folder for the uploaded files (you have to create this folder) 
$multi_upload->extensions = array(".png", ".zip"); // specify the allowed extensions here 
$multi_upload->message[] = $multi_upload->extra_text(4); // a different standard message for multiple files 
//$multi_upload->rename_file = true; // set to "true" if you want to rename all files with a timestamp value 
$multi_upload->do_filename_check = "y"; // check filename ... 
         
if(isset($_POST['Submit'])) { 
    $multi_upload->tmp_names_array = $_FILES['upload']['tmp_name']; 
    $multi_upload->names_array = $_FILES['upload']['name']; 
    $multi_upload->error_array = $_FILES['upload']['error']; 
    $multi_upload->replace = (isset($_POST['replace'])) ? $_POST['replace'] : "n"; // because only a checked checkboxes is true 
    $multi_upload->upload_multi_files(); 
} 
?>  
 
 
 
php多文件上传的例子-bbs.it-home.org

PHP 多文件上传:

Max. filesize = bytes. (each)




Replace files?

show_error_string(); ?>