功能完善的php上传类

php upload class

<?php

/**

 * This class allows a user to upload and 

 * validate their files.

 *

 * @author John Ciacia <[email protected]>

 * @version 1.0

 * @copyright Copyright (c) 2007, John Ciacia

 * @license http://opensource.org/licenses/gpl-license.php GNU Public License

 */

class Upload extends CI_Controller{

    

    /**

     *@var string contains the name of the file to be uploaded.

     */

    public $FileName;

    /**

     *@var string contains the temporary name of the file to be uploaded.

     */

    public $TempFileName;

    /**

     *@var string contains directory where the files should be uploaded.

     */

    public $UploadDirectory;

    /**

     *@var string contains an array of valid extensions which are allowed to be uploaded.

     */

    public $ValidExtensions;

    /**

     *@var string contains a message which can be used for debugging.

     */

    public $Message;

    /**

     *@var integer contains maximum size of fiels to be uploaded in bytes.

     */

    public $MaximumFileSize;

    /**

     *@var bool contains whether or not the files being uploaded are images.

     */

    public $IsImage;

    /**

     *@var string contains the email address of the recipient of upload logs.

     */

    public $Email;

    /**

     *@var integer contains maximum width of images to be uploaded.

     */

    public $MaximumWidth;

    /**

     *@var integer contains maximum height of images to be uploaded.

     */

    public $MaximumHeight;

    

	function __construct()

	{

		parent::__construct();

	}

	

	function index()

	{

		$this->load->view('upload');

	}

//    function Upload()

//    {

//

//    }



    /**

     *@method bool ValidateExtension() returns whether the extension of file to be uploaded

     *    is allowable or not.

     *@return true the extension is valid.

     *@return false the extension is invalid.

     */

    function ValidateExtension()

    {



        $FileName = trim($this->FileName);

        $FileParts = pathinfo($FileName);

            if (!$FileName) {

            $this->SetMessage("ERROR: File name is empty.");

            return false;

        }

        $Extension = strtolower($FileParts['extension']);

        $ValidExtensions = $this->ValidExtensions;



        if (!$ValidExtensions) {

            $this->SetMessage("WARNING: All extensions are valid.");

            return true;

        }



        if (in_array($Extension, $ValidExtensions)) {

            $this->SetMessage("MESSAGE: The extension '$Extension' appears to be valid.");

            return true;

        } else {

            $this->SetMessage("Error: The extension '$Extension' is invalid.");

            return false;  

        }



    }



    /**

     *@method bool ValidateSize() returns whether the file size is acceptable.

     *@return true the size is smaller than the alloted value.

     *@return false the size is larger than the alloted value.

     */

    function ValidateSize()

    {

        $MaximumFileSize = $this->MaximumFileSize;

        $TempFileName = $this->GetTempName();

        $TempFileSize = filesize($TempFileName);



        if($MaximumFileSize == "") {

            $this->SetMessage("WARNING: There is no size restriction.");

            return true;

        }



        if ($MaximumFileSize <= $TempFileSize) {

            $this->SetMessage("ERROR: The file is too big. It must be less than $MaximumFileSize and it is $TempFileSize.");

            return false;

        }



        $this->SetMessage("Message: The file size is less than the MaximumFileSize.");

        return true;

    }



    /**

     *@method bool ValidateExistance() determins whether the file already exists. If so, rename $FileName.

     *@return true can never be returned as all file names must be unique.

     *@return false the file name does not exist.

     */

    function ValidateExistance()

    {

        $FileName = $this->FileName;

        $UploadDirectory = $this->UploadDirectory;

        $File = $UploadDirectory . $FileName;



        if (file_exists($File)) {

            $this->SetMessage("Message: The file '$FileName' already exist.");

            $UniqueName = rand() . $FileName;

            $this->SetFileName($UniqueName);

            $this->ValidateExistance();

        } else {

            $this->SetMessage("Message: The file name '$FileName' does not exist.");

            return false;

        }

    }



    /**

     *@method bool ValidateDirectory()

     *@return true the UploadDirectory exists, writable, and has a traling slash.

     *@return false the directory was never set, does not exist, or is not writable.

     */

    function ValidateDirectory()

    {

        $UploadDirectory = $this->UploadDirectory;



        if (!$UploadDirectory) {

            $this->SetMessage("ERROR: The directory variable is empty.");

            return false;

        }



        if (!is_dir($UploadDirectory)) {

            $this->SetMessage("ERROR: The directory '$UploadDirectory' does not exist.");

            return false;

        }



        if (!is_writable($UploadDirectory)) {

            $this->SetMessage("ERROR: The directory '$UploadDirectory' does not writable.");

            return false;

        }



        if (substr($UploadDirectory, -1) != "/") {

            $this->SetMessage("ERROR: The traling slash does not exist.");

            $NewDirectory = $UploadDirectory . "/";

            $this->SetUploadDirectory($NewDirectory);

            $this->ValidateDirectory();

        } else {

            $this->SetMessage("MESSAGE: The traling slash exist.");

            return true;

        }

    }



    /**

     *@method bool ValidateImage()

     *@return true the image is smaller than the alloted dimensions.

     *@return false the width and/or height is larger then the alloted dimensions.

     */

    function ValidateImage() {

        $MaximumWidth = $this->MaximumWidth;

        $MaximumHeight = $this->MaximumHeight;

        $TempFileName = $this->TempFileName;



    if($Size = @getimagesize($TempFileName)) {

        $Width = $Size[0];   //$Width is the width in pixels of the image uploaded to the server.

        $Height = $Size[1];  //$Height is the height in pixels of the image uploaded to the server.

    }



        if ($Width > $MaximumWidth) {

            $this->SetMessage("The width of the image [$Width] exceeds the maximum amount [$MaximumWidth].");

            return false;

        }



        if ($Height > $MaximumHeight) {

            $this->SetMessage("The height of the image [$Height] exceeds the maximum amount [$MaximumHeight].");

            return false;

        }



        $this->SetMessage("The image height [$Height] and width [$Width] are within their limitations.");     

        return true;

    }



    /**

     *@method bool SendMail() sends an email log to the administrator

     *@return true the email was sent.

     *@return false never.

     *@todo create a more information-friendly log.

     */

    function SendMail() {

        $To = $this->Email;

        $Subject = "File Uploaded";

        $From = "From: Uploader";

        $Message = "A file has been uploaded.";

        mail($To, $Subject, $Message, $From);

        return true;

    }





    /**

     *@method bool UploadFile() uploads the file to the server after passing all the validations.

     *@return true the file was uploaded.

     *@return false the upload failed.

     */

    function UploadFile()

    {



        if (!$this->ValidateExtension()) {

            die($this->GetMessage());

        } 



        else if (!$this->ValidateSize()) {

            die($this->GetMessage());

        }



        else if ($this->ValidateExistance()) {

            die($this->GetMessage());

        }



        else if (!$this->ValidateDirectory()) {

            die($this->GetMessage());

        }



        else if ($this->IsImage && !$this->ValidateImage()) {

            die($this->GetMessage());

        }



        else {



            $FileName = $this->FileName;

            $TempFileName = $this->TempFileName;

            $UploadDirectory = $this->UploadDirectory;



            if (is_uploaded_file($TempFileName)) { 

                move_uploaded_file($TempFileName, $UploadDirectory . $FileName);

                return true;

            } else {

                return false;

            }



        }



    }



    #Accessors and Mutators beyond this point.

    #Siginificant documentation is not needed.

    function SetFileName($argv)

    {

        $this->FileName = $argv;

    }



    function SetUploadDirectory($argv)

    {

        $this->UploadDirectory = $argv;

    }



    function SetTempName($argv)

    {

        $this->TempFileName = $argv;

    }



    function SetValidExtensions($argv)

    {

        $this->ValidExtensions = $argv;

    }



    function SetMessage($argv)

    {

        $this->Message = $argv;

    }



    function SetMaximumFileSize($argv)

    {

        $this->MaximumFileSize = $argv;

    }



    function SetEmail($argv)

    {

        $this->Email = $argv;

    }

   

    function SetIsImage($argv)

    {

        $this->IsImage = $argv;

    }



    function SetMaximumWidth($argv)

    {

        $this->MaximumWidth = $argv;

    }



    function SetMaximumHeight($argv)

    {

        $this->MaximumHeight = $argv;

    }   

    function GetFileName()

    {

        return $this->FileName;

    }



    function GetUploadDirectory()

    {

        return $this->UploadDirectory;

    }



    function GetTempName()

    {

        return $this->TempFileName;

    }



    function GetValidExtensions()

    {

        return $this->ValidExtensions;

    }



    function GetMessage()

    {

        if (!isset($this->Message)) {

            $this->SetMessage("No Message");

        }



        return $this->Message;

    }



    function GetMaximumFileSize()

    {

        return $this->MaximumFileSize;

    }



    function GetEmail()

    {

        return $this->Email;

    }



    function GetIsImage()

    {

        return $this->IsImage;

    }



    function GetMaximumWidth()

    {

        return $this->MaximumWidth;

    }



    function GetMaximumHeight()

    {

        return $this->MaximumHeight;

    }

}



if(isset($_FILES['upload']['tmp_name'])) {

    $upload = new Upload();

    $upload->SetFileName($_FILES['upload']['name']);

    $upload->SetTempName($_FILES['upload']['tmp_name']);

    $upload->SetUploadDirectory(APPPATH."image/"); //Upload directory, this should be writable

    $upload->SetValidExtensions(array('gif', 'jpg', 'jpeg', 'png')); //Extensions that are allowed if none are set all extensions will be allowed.

    //$upload->SetEmail("[email protected]"); //If this is set, an email will be sent each time a file is uploaded.

    //$upload->SetIsImage(true); //If this is set to be true, you can make use of the MaximumWidth and MaximumHeight functions.

    //$upload->SetMaximumWidth(60); // Maximum width of images

    //$upload->SetMaximumHeight(400); //Maximum height of images

    $upload->SetMaximumFileSize(3000000000); //Maximum file size in bytes, if this is not set, the value in your php.ini file will be the maximum value

    echo $upload->UploadFile();



}

use

<?php

//include("Upload.php");



echo "<form enctype='multipart/form-data' action='' method='POST'>"

."<input name='upload' type='file' /><input type='submit' value='Upload' />"

."</form>";

你可能感兴趣的:(PHP)