设为首页收藏本站
查看: 115|回复: 0

[PHP] php高级完美多文件上传类程序-PHP源码

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34274
主题
17031
UID
1347
M币
67
贡献
17176

  • 发表于 2018-7-16 20:46:00 | 显示全部楼层 |阅读模式
    $auc = new auc();
    if ($action == 'uploadfile') {
    $auc = new auc();

    $result = $auc->upload("file");
    if (is_array($result)) {
    echo 'Something Went Wrong';
    echo '';
    var_dump($result);
    echo '';
    } else {
    echo 'All OK';
    }
    } else {
    ?>















    类文件

    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 '';
    var_dump($files);
    echo '';

    for ($current = 0; $current 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}";
    }
    }
    ?>
    [/td] [/tr] [/table]
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表