仿开源中国,分享代码时候的多文件上传

<?php
//http://www.codepearl.com
$action = isset($_GET['action'])?$_GET['action']:"";
require_once('main.class.php');
 
$auc = new auc();
 
if ($action == 'uploadfile') {
    $auc = new auc();
    //Comment: $auc->upload_dir("directory name", "create dir if it does not exist, false by default or true");
    //$auc->upload_dir("/path/to/uploads/folder/with/trailing/slash/", false);
    //Comment: $auc->make_safe = true || false (default); make the file name safe
    //$auc->make_safe = true;
    //Comment: $auc->max_file_size = size in bytes (1MB default) || false; set max file size in bytes or false not to check size
    //$auc->max_file_size = 1048576;
    //Comment: $auc->overwrite = true || false (default); overwrite if file exists
    //$auc->overwrite = true;
    //Comment: $auc->check_file_type = false (default) || allowed || denied;
    //$auc->check_file_type = 'allowed';
    $result = $auc->upload("file");
    if (is_array($result)) {
        echo 'Something Went Wrong';
        echo '<pre>';
        var_dump($result);
        echo '</pre>';
    } else {
        echo 'All OK';
    }
} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Upload Class - Demo</title>
</head>
<body>
<form action="demo.php?action=uploadfile" method="post" enctype="multipart/form-data">
  <input name="file[]" type="file" /><br />
  <input name="file[]" type="file" /><br />
  <input name="upload" type="submit" value="Upload File" />
</form>
</body>
</html>
<?php  } ?>


<?php
//http://www.codepearl.com
class auc {
    public $errors = array(); //array used to store any errors that occur.
    public $upload_dir = ''; //the upload_dir being used by the script
    public $make_safe = false; //default don't modify the file name to safe version
    public $max_file_size = 1048576; //Max File Size in Bytes, 1MB
    public $overwrite = false; //default don't overwrite files that already exsist
    public $check_file_type = false; //don't check for file type by default but can check for allowed and denied files.
    public $allowed_mime_types = array('image/jpeg', 'image/png', 'image/gif', 'image/tiff'); //array of allowed mime types used when check_file_type is set to allowed
    public $denied_mime_types = array('application/x-php', 'text/html'); //array of denied mime types used when check_file_type is set to denied
     
    /**
     * Check if the upload dir is valid, if it is not valid attempt to make the dir, if dir is succesfully created chmod it to 0777.
     * If any elments fail return false else set upload_dir and return true.
     * @param string $dir
     * @param boolean $mkdir
     * @return true or false
     */
    public function upload_dir($dir, $mkdir = false) {
        $errors =& $this->errors;
        $status = true;
         
        if (!is_dir($dir)) {
            if ($mkdir) {
                if (!mkdir($dir)) {
                    $status = false;
                } else {
                    if (!chmod($dir, 0777)) $status = false;
                }
            } else {
                $status = false;
            }
        }
         
        if ($status) {
            $this->upload_dir = $dir;
            return true;
        } else {
            $errors['general'][] = 'Upload Dir is Not Valid and/or a dir could not be created/chmod.';
            return false;
        }
    }
     
    /**
     * check that the upload dir is valid and that it is writeable
     *
     * @param string $dir
     * @return true or false
     */
    public function check_dir($dir) {
        if (!is_dir($dir) || !is_writable($dir)) return false;
         
        return true;
    }
     
 
    /**
     * make the uploaded file name safe
     *
     * @param string $file_name
     * @return safe file name
     */
    public function make_safe($file_name) {
        return str_replace(' ', '_', $file_name);
    }
         
    /**
     * Check the Attemted Uploads for errors etc if everything goes good move the file, to the upload_dir.
     *
     * @param array $object
     * @return unknown
     */
    public function upload($object) {
        $errors =& $this->errors;
         
        if (empty($errors['general'])) {
            if (empty($this->upload_dir)) $this->upload_dir = dirname(__FILE__).'/'; //if no default upload_dir has been specified used the current dir.
                     
            if ($this->check_dir($this->upload_dir)) {
                $files = $_FILES[$object];
                $count = count($files['name']) - 1;
                 
                echo '<pre>';
                var_dump($files);
                echo '</pre>';
                 
                for ($current = 0; $current <= $count; $current++) {
                    $error = '';
                    try {
                        //check for $_FILES Errors
                        switch ($files['error'][$current]) {
                            case 0 : break;
                            case 1 : $error = $files['name'][$current].' exceeds the upload_max_filesize directive in php.ini'; break;
                            case 2 : $error = $files['name'][$current].' exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'; break;
                            case 3 : $error = $files['name'][$current].' was only partially uploaded'; break;
                            case 4 : $error = 'No file was uploaded'; break;
                            case 6 : $error = 'Missing a temporary folder'; break;
                            case 7 : $error = 'Failed to write '.$files['name'][$current].' to disk'; break;
                            case 8 : $error = $files['name'][$current].' stopped by extension'; break;
                            default : $error = 'Unidentified Error, caused by '.$files['name'][$current]; break;
                        }
                        if ($error)
                            throw new TrigerErrorException($error, $files['name'][$current]);
                         
                        //check that the file is not empty
                        if ($files['size'][$current] <= 0)
                            throw new TrigerErrorException($files['name'][$current].' is empty', $files['name'][$current]);
                         
                        //check that the file does not exceed the defined max_file_size
                        if ($this->max_file_size) {
                            if ($files['size'][$current] >= $this->max_file_size)
                                throw new TrigerErrorException($files['name'][$current].' exceeds defined max_file_size', $files['name'][$current]);
                        }
                         
                        if ($this->check_file_type == 'allowed' && !in_array($files['type'][$current], $this->allowed_mime_types)) {
                            throw new TrigerErrorException($files['name'][$current].' is not an allowed type', $files['name'][$current]);
                        } elseif ($this->check_file_type == 'denied' && in_array($files['type'][$current], $this->denied_mime_types)) {
                            throw new TrigerErrorException($files['name'][$current].' is a denied type', $files['name'][$current]);
                        }
                         
                        //if make_safe is true call make safe function     
                        if ($this->make_safe)
                            $files['name'][$current] = $this->make_safe($files['name'][$current]);
                         
                        //if overwrite is false and the file exists error
                        if (!$this->overwrite && file_exists($this->upload_dir.$files['name'][$current]))
                            throw new TrigerErrorException($files['name'][$current].' already exsists', $files['name'][$current]);
                             
                        //move the uploaded file, error if anything goes wrong.
                        if (!move_uploaded_file($files['tmp_name'][$current], $this->upload_dir.$files['name'][$current]))
                            throw new TrigerErrorException($files['name'][$current].' could not be moved', $files['name'][$current]);
                    } catch (TrigerErrorException $e) {
                        $errors[$files['name'][$current]][] = $e->Message();
                    }
                }
                 
                if (empty($errors)) {
                    //return true if there where no errors
                    return true;
                } else {
                    //return the errors array if there where any errros
                    return $errors;
                }
            } else {
                //return false as dir is not valid
                $errors['general'][] = "The Specified Dir is Not Valid or is Not Writeable";
                return false;
            }
        }
    }  
}
 
/**
 * Handle the Exceptions trigered by errors within upload code.
 *
 */
class TrigerErrorException extends Exception {
    protected $file = "";
    public function __construct($message, $file = "", $code = 0) {
        $this->file = $file;
        parent::__construct($message, $code);
    }
 
    public function Message() {
        return "{$this->message}";
    }
}
?>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值