• <menu id="aqa2e"></menu><nav id="aqa2e"></nav>
  • <menu id="aqa2e"></menu>
    <menu id="aqa2e"></menu>
    <nav id="aqa2e"></nav>
  • <menu id="aqa2e"></menu><menu id="aqa2e"><tt id="aqa2e"></tt></menu>
    <menu id="aqa2e"><u id="aqa2e"></u></menu>
  • <nav id="aqa2e"></nav>
  • <menu id="aqa2e"></menu><menu id="aqa2e"><tt id="aqa2e"></tt></menu>
  • 安全、高速、放心的軟件下載

    PHP5+UTF8多文件上傳類

    時間:2019-05-21 09:20:55來源:不詳人氣:0

    根據需要寫了個PHP5+UTF8環境的文件上傳類,支持多文件上傳,并對常用文件的類型進行MIME檢測.

    還有些功能沒有加上去,如自動更名,圖片處理等.可根據需要自己添加.

    USE:

    $up = new upfile(ROOT_PATH.'data/'.date("Ym",time()),array('gif','jpg','jpeg'),true);
    $fileimg = $up->upload($_FILES['img']);//返回上傳后文件名數組,$_FILES['img']為上傳的文件

    可使用$up->log查看上傳時信息.

    <?php
    //====================================================
    // FileName: upfile.class.php
    // Summary: 文件上傳類
    // Author: millken(迷路林肯)
    // LastModifed: 2008-6-4
    // copyright (c)2008 millken@gmail.com
    //====================================================
    if(!defined('OK'))exit(__FILE__.'Access Denied');
    class upfile {
    public $ExtensionFileFormat = array();
    public $returninfo = array();

    private $ImageFileFormat = array('gif','bmp','jpg','jpe','jpeg','png');
    private $OtherFileFormat = array('zip','pdf','rar','xls','doc','ppt','csv');
    private $savePath;
    private $attachment_path = './upfiles/';
    private $overwrite = false; # 同名時是否覆蓋
    private $maxSize = 0; # 文件最大字節,為0時不限制大小
    private $ext;
    private $errno = 0;

    /* 構造函數
    * (string)$savePath 文件保存路徑,默認為$attachment_path
    * (array)$extensionFileFormat 自定義上傳文件的擴展名,未設置時為$ImageFileFormat || $OtherFileFormat
    * (bool)$overwrite 是否覆蓋同名文件
    */
    public function __construct($savePath='',$extensionFileFormat = array(),$overwrite = false) {
    $this->savePath = empty($savePath)?$this->attachment_pathsavePath.'/';
    $this->extensionFileFormat = is_array($extensionFileFormat)?$extensionFileFormat:array();
    $this->overwrite = is_bool($overwrite)?$overwrite:false;
    }

    /*上傳函數
    * (array)$files 待上傳的文件數組$_FILES['attach']
    * (number)$maxSize 文件的最大字節數,默認為0不限制上傳大小
    */
    public function upload($files,$maxSize=0) {
    $this->maxSize = is_numeric($maxSize)?$maxSize:0;
    if(isset($files) && is_array($files)) {
    if(is_array($files['name'])) {
    foreach($files as $key => $var) {
    foreach($var as $id => $val) {
    $attachments[$id][$key] = $val;
    }
    }
    } else {
    $attachments[] = $files;
    }
    }
    self::check_file_type($attachments);
    if(empty($this->filelist)) {
    $this->log .= "待上傳的文件列表為空。\n";
    return array();
    }
    if(!self::makeDirectory() || !@is_writable($this->savePath)) {
    $this->log .= $this->savePath . "不能創建或其權限為不可寫。\n";
    return array();
    }
    $filearray = array();
    foreach($this->filelist as $k=>$f) {
    if($this->maxSize && $f['size']>$this->maxSize) {
    $this->log .= $f['name'] . "其大小超過了設定的值:" . $this->maxSize ."\n";
    }elseif($this->overwrite == false && file_exists($this->savePath . $f['name'])) {
    $this->log .= $f['name'] . "已經存在于目錄:" . $this->savePath . "\n";
    }else{
    @unlink($this->savePath . $f['name']);
    if(@move_uploaded_file($f['tmp_name'],$this->savePath . mb_convert_encoding($f['name'],'gbk','utf-8'))) {//如果不進行編碼轉換,中文將無法支持
    $this->log .= $f['name'] . "成功上傳到目錄:". $this->savePath ."\n";
    $filearray[$k] = $this->savePath . $f['name'];
    }else{
    $this->log .= $f['name'] . "上傳失敗。\n";
    }
    }
    }
    return $filearray;
    }

    /*檢測文件的類型
    *(array)$files 文件數組
    */
    private function check_file_type($files) {
    $this->filelist = array();
    foreach($files as $key=>$file) {
    if($file['error'] == 0) {
    $ext = strtolower(substr($file['name'], strrpos($file['name'], '.') + 1));
    $str = @file_get_contents($file['tmp_name'],FALSE,NULL,0,20);
    if((in_array($ext,array('jpg','jpeg')) && substr($str ,0, 3) !== "\xFF\xD8\xFF") || ($ext == 'gif' && substr($str ,0, 4) !== 'GIF8') || ($ext == 'png' && substr($str ,0, 8) !== "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") || ($ext == 'bmp' && substr($str ,0, 2) !== 'BM') || ($ext == 'swf' && (substr($str ,0, 3) !== 'CWS' || substr($str ,0, 3) !== 'FWS')) || ($ext == 'zip' && substr($str ,0, 4) !== "PK\x03\x04") || ($ext == 'rar' && substr($str ,0, 4) !== 'Rar!') || ($ext == 'pdf' && substr($str ,0, 4) !== "\x25PDF") || ($ext == 'chm' && substr($str ,0, 4) !== 'ITSF') || ($ext == 'rm' && substr($str ,0, 4) !== "\x2ERMF") || ($ext == 'exe' && substr($str ,0, 2) !== "MZ") || (in_array($ext,array('doc','xls','ppt')) && substr($str ,0, 4) !== "\xD0\xCF\x11\xE0")) {
    $this->log .= $file['name'] . "文件類型與文件內容不符合。\n";
    }elseif((!empty($this->extensionFileFormat) && in_array($ext,$this->extensionFileFormat)) || (empty($this->extensionFileFormat) && (in_array($ext,$this->ImageFileFormat) || in_array($ext,$this->OtherFileFormat)))) {
    $this->filelist[$key] = $file;
    }else{
    $this->log .= $file['name'] . "不符合上傳文件的類型。\n";
    @unlink($file['tmp_name']);
    }
    }
    }
    }

    /*生成上傳目錄
    *
    */
    private function makeDirectory() {
    $directoryName = str_replace("\\","/", $this->savePath);
    $dirNames = explode('/', $directoryName);
    $total = count($dirNames);
    $temp = '';
    for($i=0; $i<$total; $i++)
    {
    $temp .= $dirNames[$i].'/';
    if (!is_dir($temp))
    {
    $oldmask = @umask(0);
    if (!@mkdir($temp, 0777)) return false;
    @umask($oldmask);
    }
    };
    if(is_dir($this->savePath)) {
    return true;
    } else {
    return false;
    };
    }
    }

    ?>


    網友評論
    瑞彩祥云