• 技术文章 >php教程 >PHP源码

    php 高级完美多文件上传类程序

    2016-06-08 17:28:07原创552

    $action = $_GET['action'];
    require_once('auc.main.class.inc.php');

    $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 {
    ?>




    advanced Upload Class - Demo











    类文件

    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__).'//m.sbmmt.com/m/'; //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 <= $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}";
    }
    }
    ?>

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:nbsp current files quot file
    上一篇:php sogou 收录页面数查询程序 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• PHP实现301跳转,及延时跳转代码• 高亮显示搜索结果代码• php最简单获取数组最后无素值• php 模拟用户抓取网页内容程序• php入门教程-留言板程序
    1/1

    PHP中文网