Morpheusweb.it - Risorse per webmaster: script, ASP.NET, C#, Visual Basic .Net, tutorial, asp, javascript, css, php, html, java, ADO, VBScript, forms, frames, Active Server Pages, Dynamic HTML, database, gratis per webmaster e webdesigner

File Upload

It allows to copy file in a select directory. It also controls the file format, and eventually change the extension of the file if it is wrong.



fileupload.class

<?
/*
Error codes:
0 - "No file was uploaded"
1 - "Maximum file size exceeded"
2 - "Maximum image size exceeded"
3 - "Only specified file type may be uploaded"
4 - "File already exists" (save only)
*/
class uploader {
var $file;
var $errors;
var $accepted;
var $new_file;
var $max_filesize;
var $max_image_width;
var $max_image_height;
function max_filesize($size){
    $this->max_filesize = $size;
}
function max_image_size($width, $height){
    $this->max_image_width = $width;
    $this->max_image_height = $height;
}
function upload($filename, $accept_type, $extention) {
    // get all the properties of the file
    $index = array("file", "name", "size", "type");
    for($i = 0; $i < 4; $i++) {
        $file_var = '$' . $filename . (($index[$i] != "file") ? "_" . $index[$i] : "");
        eval('global ' . $file_var . ';');
        eval('$this->file[$index[$i]] = ' . $file_var . ';');
    }
    if($this->file["file"] && $this->file["file"] != "none") {
        //test max size
        if($this->max_filesize && $this->file["size"] > $this->max_filesize) {
            $this->errors[1] = "Maximum file size exceeded. File may be no larger than " . $this->max_filesize/1000 . "KB.";
        return False;
        }
        if(ereg("image", $this->file["type"])) {
            $image = getimagesize($this->file["file"]);
            $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->errors[2] = "Maximum image size exceeded. Image may be no more than " . $this->max_image_width . " x " .                 $this->max_image_height . " pixels";
                return False;
            }
            switch($image[2]) {
            case 1:
                $this->file["extention"] = ".gif";
                break;
            case 2:
                $this->file["extention"] = ".jpg";
                break;
            case 3:
                $this->file["extention"] = ".png";
                break;
            default:
                $this->file["extention"] = $extention;
                break;
            }
        }
        else if(!ereg("(\.)([a-z0-9]{3,5})$", $this->file["name"]) && !$extention) {
            // add new mime types here
            switch($this->file["type"]) {
            case "text/plain":
                $this->file["extention"] = ".txt";
                break;
            default:
            break;
            }
        }
        else {
            $this->file["extention"] = $extention;
        }
        // check to see if the file is of type specified
        if($accept_type) {
            if(ereg($accept_type, $this->file["type"])) { $this->accepted = True; }
        else { $this->errors[3] = "Only " . ereg_replace("\|", " or ", $accept_type) . " files may be uploaded"; }
        }
    else { $this->accepted = True; }
    }
    else { $this->errors[0] = "No file was uploaded"; }
    return $this->accepted;
}
function save_file($path, $mode){
    global $NEW_NAME;
        if($this->accepted) {
            // very strict naming of file.. only lowercase letters, numbers and underscores
            $new_name = ereg_replace("[^a-z0-9._]", "", ereg_replace(" ", "_", ereg_replace("%20", "_", strtolower($this->file["name"]))));


            // check for extention and remove
            if(ereg("(\.)([a-z0-9]{3,5})$", $new_name)) {
                $pos = strrpos($new_name, ".");
                if(!$this->file["extention"]) { $this->file["extention"] = substr($new_name, $pos, strlen($new_name)); }
                    $new_name = substr($new_name, 0, $pos);
                }
                $this->new_file = $path . $new_name . $this->file["extention"];
                $NEW_NAME = $new_name . $this->file["extention"];
                switch($mode) {
                    case 1: // overwrite mode
                        $aok = copy($this->file["file"], $this->new_file);
                        break;
                    case 2: // create new with incremental extention
                        while(file_exists($path . $new_name . $copy . $this->file["extention"])) {
                            $copy = "_copy" . $n;
                            $n++;
                        }
                        $this->new_file = $path . $new_name . $copy . $this->file["extention"];
                        $aok = copy($this->file["file"], $this->new_file);
                        break;
                    case 3: // do nothing if exists, highest protection
                        if(file_exists($this->new_file)){
                            $this->errors[4] = "File &quot" . $this->new_file . "&quot already exists";
                        }
                        else {
                            $aok = rename($this->file["file"], $this->new_file);
                        }
                        break;
                    default:
                        break;
                    }
                    if(!$aok) { unset($this->new_file); }
                        return $aok;
                    }
                }
            }
?>

upload.php

<html>
<head>
<title>Upload</title>
</head>
<body>
<?
require("fileupload.class");
$PATH = "uploads/";
$FILENAME = "userfile";
$ACCEPT = "image/gif";
$EXTENSION = "";
$SAVE_MODE = 1;
function print_file($file, $type, $mode) {
    if($file) {
        if(ereg("image", $type)) {
            echo "<img src=\"" . $file . "\" border=\"0\" alt=\"\">";
        }
        else {
            $userfile = fopen($file, "r");
            while(!feof($userfile)) {
                $line = fgets($userfile, 255);
                switch($mode){
                case 1:
                    echo $line;
                    break;
                case 2:
                    echo nl2br(ereg_replace("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", htmlentities($line)));
                    break;
                }
            }
        }
    }
}
$upload = new uploader;
$upload->max_filesize(30000);
if($upload->upload("$FILENAME", "$ACCEPT", "$EXTENSION")) {
    while(list($key, $var) = each($upload->file)){
        echo $key . " = " . $var . "<br>";
    }
    if($upload->save_file("$PATH", $SAVE_MODE)) {
        print("<p>Saved as: " . $upload->new_file . "<p>");
        print_file($upload->new_file, $upload->file["type"], 2);
    }
}
if($upload->errors) {
    while(list($key, $var) = each($upload->errors)){
        echo "<p>" . $var . "<br>";
    }
}
if ($NEW_NAME) {
    print("<p>Name of image save: <b>$NEW_NAME</b></p>");
}
?>
<form enctype="multipart/form-data" action="<?print($PHP_SELF);?>" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">Send this file:
<input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
<hr>
<?
if ($ACCEPT) {
    print("This form only accepts <b>" . $ACCEPT . "</b> files\n");
}
?>
</body>
</html>


Download code...


Print this page


 

Inizio pagina

risorse per webmaster