SitePoint Sponsor

User Tag List

Results 1 to 3 of 3
  1. #1
    SitePoint Enthusiast therat's Avatar
    Join Date
    May 2004
    Location
    London
    Posts
    46
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Fileupload class

    I have been using the class below to upload one file but I know need to upload 2 at the same time. Is this code capable of doing this at the moment, or would it need a complete re-write. This is not all my own work, it has been put together from various differnet scripts found on the net. If ti helps all I need to upload are jpgs, gifs and zip or rar archives. Any help appreciated.
    PHP Code:
    <?php
    class FileUpload {

        var 
    $path;
        var 
    $acceptable_file_types;
        var 
    $error;
        var 
    $max_filesize;
        var 
    $max_image_width;
        var 
    $max_image_height;

        
    //Class constructor method
        
    function FileUpload() {
            
    $this->error   '';
        }

        
    //Sets the maximum file size in bytes 
        
    function max_filesize($size) {
            
    $this->max_filesize = (int) ($size);
        }

        
    //Sets the maximum image size. Only used if upload is an image file
        
    function max_image_size($width$height) {
            
    $this->max_image_width = (int) ($width);
            
    $this->max_image_height = (int) ($height);
        }

        
    //Checks if file is allowed and uploads to PHP's default directory
        
    function upload($filename=''$accept_type=''$extension='') {
            
    $this->acceptable_file_types trim($accept_type); // used by error messages
            
    if (!isset($_FILES) || !is_array($_FILES[$filename]) || !$_FILES[$filename]['name']) {
                
    $this->error $this->get_error(0);
                
    $this->accepted  FALSE;
                return 
    FALSE;
            }
            
    // Copy PHP's global $_FILES array to a local array
            
    $this->file $_FILES[$filename];
            
    $this->file['file'] = $filename;
            
    // Initialize empty array elements
            
    if (!isset($this->file['extention'])) $this->file['extention'] = "";
            if (!isset(
    $this->file['type']))      $this->file['type']      = "";
            if (!isset(
    $this->file['size']))      $this->file['size']      = "";
            if (!isset(
    $this->file['width']))     $this->file['width']     = "";
            if (!isset(
    $this->file['height']))    $this->file['height']    = "";
            if (!isset(
    $this->file['tmp_name']))  $this->file['tmp_name']  = "";
            if (!isset(
    $this->file['raw_name']))  $this->file['raw_name']  = "";
            
    // test max size
            
    if($this->max_filesize && ($this->file["size"] > $this->max_filesize)) {
                
    $this->error $this->get_error(1);
                
    $this->accepted  FALSE;
                return 
    FALSE;
            }
            if(
    stristr($this->file["type"], "image")) {
                
                
    /* IMAGES */
                
    $image getimagesize($this->file["tmp_name"]);
                
    $this->file["width"]  = $image[0];
                
    $this->file["height"] = $image[1];
                
                
    // test max image size
                
    if(($this->max_image_width || $this->max_image_height) && (($this->file["width"] > $this->max_image_width) || ($this->file["height"] > $this->max_image_height))) {
                    
    $this->error $this->get_error(2);
                    
    $this->accepted  FALSE;
                    return 
    FALSE;
                }
                
    // Image Type is returned from getimagesize() function
                
    switch($image[2]) {
                    case 
    1:
                        
    $this->file["extention"] = ".gif"; break;
                    case 
    2:
                        
    $this->file["extention"] = ".jpg"; break;
                    case 
    3:
                        
    $this->file["extention"] = ".png"; break;
                    case 
    4:
                        
    $this->file["extention"] = ".swf"; break;
                    case 
    5:
                        
    $this->file["extention"] = ".psd"; break;
                    case 
    6:
                        
    $this->file["extention"] = ".bmp"; break;
                    case 
    7:
                        
    $this->file["extention"] = ".tif"; break;
                    case 
    8:
                        
    $this->file["extention"] = ".tif"; break;
                    default:
                        
    $this->file["extention"] = $extention; break;
                }
            } elseif(!
    ereg("(\.)([a-z0-9]{3,5})$"$this->file["name"]) && !$extention) {
                
    // Try and autmatically figure out the file type
                // For more on mime-types: [url]http://httpd.apache.org/docs/mod/mod_mime_magic.html[/url]
                
    switch($this->file["type"]) {
                    case 
    "text/plain":
                        
    $this->file["extention"] = ".txt"; break;
                    case 
    "text/richtext":
                        
    $this->file["extention"] = ".txt"; break;
                    default:
                        break;
                }
            } else {
                
    $this->file["extention"] = $extention;
            }
            
    // check to see if the file is of type specified
            
    if($this->acceptable_file_types) {
                if(
    trim($this->file["type"]) && (stristr($this->acceptable_file_types$this->file["type"]) || stristr($this->file["type"], $this->acceptable_file_types)) ) {
                    
    $this->accepted TRUE;
                } else { 
                    
    $this->accepted FALSE;
                    
    $this->error $this->get_error(3);
                }
            } else { 
                
    $this->accepted TRUE;
            }
            
            return (bool) 
    $this->accepted;
        }

        
    //Cleans the filename and copies file from temp location to $path
        
    function save_file($path) {
            if (
    $this->error) {
                return 
    false;
            }
            if (
    strlen($path)>0) {
                if (
    $path[strlen($path)-1] != "/") {
                    
    $path $path "/";
                }
            }
            
    $this->path $path;    
            
    $copy       "";    
            
    $n          1;    
            
    $success    false;    
                    
            if(
    $this->accepted) {
                
    // Clean up file name (only lowercase letters, numbers and underscores)
                
    $this->file["name"] = ereg_replace("[^a-z0-9._]"""str_replace(" ""_"str_replace("%20""_"strtolower($this->file["name"]))));
                
                
    // Clean up text file breaks
                
    if(stristr($this->file["type"], "text")) {
                    
    $this->cleanup_text_file($this->file["tmp_name"]);
                }
                
                
    // get the raw name of the file (without its extenstion)
                
    if(ereg("(\.)([a-z0-9]{2,5})$"$this->file["name"])) {
                    
    $pos strrpos($this->file["name"], ".");
                    if(!
    $this->file["extention"]) { 
                        
    $this->file["extention"] = substr($this->file["name"], $posstrlen($this->file["name"]));
                    }
                    
    $this->file['raw_name'] = substr($this->file["name"], 0$pos);
                } else {
                    
    $this->file['raw_name'] = $this->file["name"];
                    if (
    $this->file["extention"]) {
                        
    $this->file["name"] = $this->file["name"] . $this->file["extention"];
                    }
                }
                        if (
    move_uploaded_file($this->file["tmp_name"], $this->path $this->file["name"])) {
                            
    $success true;
                        } else {
                            
    $success     false;
                            
    $this->error $this->get_error(5);
                        }
                if(!
    $success) { unset($this->file['tmp_name']); }
                return (bool) 
    $success;
            } else {
                
    $this->error $this->get_error(3);
                return 
    FALSE;
            }
        }

        
    //Gets the error message if any
        
    function get_error($error_code='') {
            
    $error_message = array();
            
    $error_code    = (int) $error_code;
                    
    $error_message[0] = "No file was uploaded";
                    
    $error_message[1] = "Maximum file size exceeded. File may be no larger than " $this->max_filesize/1000 " KB (" $this->max_filesize " bytes).";
                    
    $error_message[2] = "Maximum image size exceeded. Image may be no more than " $this->max_image_width " x " $this->max_image_height " pixels.";
                    
    $error_message[3] = "Only " str_replace("|"" or "$this->acceptable_file_types) . " files may be uploaded.";
                    
    $error_message[4] = "File '" $this->path $this->file["name"] . "' already exists.";
                    
    $error_message[5] = "Permission denied. Unable to copy file to '" $this->path "'";
            return 
    $error_message[$error_code];
        }
    }
    ?>

  2. #2
    Resistance is Futile webgodjj's Avatar
    Join Date
    Nov 2002
    Location
    Madison, WI USA
    Posts
    448
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I don't see why not... If you name both file field file[], this will put them into an array. Then just cycle throught the array.... look into while statements and array functions... Does this help?

  3. #3
    SitePoint Enthusiast therat's Avatar
    Join Date
    May 2004
    Location
    London
    Posts
    46
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Yes it does, i'll give it a go, thanks


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •