当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP单文件上传类或多文件上传类源码

PHP
如何用PHP脚本和PEAR类创建ZIP档案文件
在线管理PHP网站文件
利用PHP代码实现网页自动判断转向
PHP程序中的特效应用 实用代码珍藏
如何使用PHP和PEAR进行不同时区的转换
如何用php生成WAP页面
php:树形结构的算法 4
php:树形结构的算法 3
php:树形结构的算法 2
php:树形结构的算法1
apache 环境下 php 的配置
php编写大型网站问题集
php中文乱码问题及解决方法
草根的进化 PHP语言发展简史
测试 Apache Web 和 PHP 应用程序服务器
用php实现简单的滑动菜单
php分页类
基于PHP和AJAX创建RSS聚合器
PHP下一代的五个framework介绍
搜索引擎技术核心揭密(PHP版)

PHP单文件上传类或多文件上传类源码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 131 ::
收藏到网摘: n/a

以下为引用的内容:

php文件:

代码:

<?php
//如果收到表单传来的参数,则进行上传处理,否则显示表单
if(isset($_FILES['uploadinput'])){
//建目录函数,其中参数$directoryName最后没有"/",
//要是有的话,以'/'打散为数组的时候,最后将会出现一个空值
function makeDirectory($directoryName) {
       $directoryName = str_replace("\","/",$directoryName);
       $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)) exit("不能建立目录 $temp");
            umask($oldmask);
         }
       }
       return true;
}

if($_FILES['uploadinput']['name'] <> ""){
       //包含上传文件类
       require_once ('class_upload.php');
       //设置文件上传目录
       $savePath = "upload";
       //创建目录
       makeDirectory($savePath);
       //允许的文件类型
       $fileFormat = array('gif','jpg','jpge','png');
       //文件大小限制,单位: Byte,1KB = 1000 Byte
       //0 表示无限制,但受php.ini中upload_max_filesize设置影响
       $maxSize = 0;
       //覆盖原有文件吗? 0 不允许   1 允许
       $overwrite = 0;
       //初始化上传类
       $f = new clsUpload( $savePath, $fileFormat, $maxSize, $overwrite);
       //如果想生成缩略图,则调用成员函数 $f->setThumb();
       //参数列表: setThumb($thumb, $thumbWidth = 0,$thumbHeight = 0)
       //$thumb=1 表示要生成缩略图,不调用时,其值为 0
       //$thumbWidth   缩略图宽,单位是像素(px),留空则使用默认值 130
       //$thumbHeight 缩略图高,单位是像素(px),留空则使用默认值 130
       $f->setThumb(1);
     
       //参数中的uploadinput是表单中上传文件输入框input的名字
       //后面的0表示不更改文件名,若为1,则由系统生成随机文件名
       if (!$f->run('uploadinput',0)){
         //通过$f->errmsg()只能得到最后一个出错的信息,
         //详细的信息在$f->getInfo()中可以得到。
         echo $f->errmsg()."
n";
       }
       //上传结果保存在数组returnArray中。
       echo "<pre>";
       print_r($f->getInfo());
       echo "</pre>";
}
}else{
?>
<form enctype="multipart/form-data" action="" method="POST">
Send this file:

<input name="uploadinput[]" type="file">

<input name="uploadinput[]" type="file">

<input name="uploadinput[]" type="file">

<input type="submit" value="Send File">

</form>
<?php
}
//我们上传一个已经存在了的图片文件,
//一个正常的图片文件,和一个不允许上传的文件,
//输出结果如下
/*
The uploaded file is Unallowable!

Array
(
[0] => Array
       (
         [name] => boy.jpg
         [saveName] => boy.jpg
         [size] => 137
         [type] => image/pjpeg
         [error] => File exist already!
       )

以下为引用的内容:

[1] => Array
       (
         [name] => girl.JPG
         [saveName] => girl.JPG
         [size] => 31
         [type] => image/pjpeg
         [originalHeight] => 450
         [originalWidth] => 600
       )

[2] => Array
       (
         [name] => test.wma
         [saveName] => test.wma
         [size] => 971
         [type] => audio/x-ms-wma
         [error] => The uploaded file is Unallowable!
       )

)
*/
?>

类文件
代码:

<?php
/*
       ○︿
       ︶
      √ ﹀ . 。o O . ~~
○╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦○
╠╬╬   TITLE    : CLASS clsUpload             ╬╬╣
╠╬ FILE        : class_upload.php             ╬╣
╠╬╬   REVISION : V1.0.2                      ╬╬╣
○╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩○
*/
class clsUpload{
var $saveName;// 保存名
var $savePath;// 保存路径
var $fileFormat = array('gif','jpg','doc','application/octet-stream');// 文件格式&MIME限定
var $overwrite = 0;// 覆盖模式
var $maxSize = 0;// 文件最大字节
var $ext;// 文件扩展名
var $thumb = 0;// 是否生成缩略图
var $thumbWidth = 130;// 缩略图宽
var $thumbHeight = 130;// 缩略图高
var $thumbPrefix = "_thumb_";// 缩略图前缀
var $errno;// 错误代号
var $returnArray= array();// 所有文件的返回信息
var $returninfo= array();// 每个文件返回信息


//构造函数
// @param savePath 文件保存路径
// @param fileFormat 文件格式限制数组
// @param maxSize 文件最大尺寸
// @param overwriet 是否覆盖 1 允许覆盖 0 禁止覆盖

function clsUpload($savePath, $fileFormat='',$maxSize = 0, $overwrite = 0) {
       $this->setSavepath($savePath);
       $this->setFileformat($fileFormat);
       $this->setMaxsize($maxSize);
       $this->setOverwrite($overwrite);
       $this->setThumb($this->thumb, $this->thumbWidth,$this->thumbHeight);
       $this->errno = 0;
}

// 上传
function run($fileInput,$changeName = 1){
       if(isset($_FILES[$fileInput])){
         $fileArr = $_FILES[$fileInput];
         if(is_array($fileArr['name'])){//上传同文件域名称多个文件
            for($i = 0; $i < count($fileArr['name']); $i++){
                   $ar['tmp_name'] = $fileArr['tmp_name'][$i];
                   $ar['name'] = $fileArr['name'][$i];
                   $ar['type'] = $fileArr['type'][$i];
                   $ar['size'] = $fileArr['size'][$i];
                   $ar['error'] = $fileArr['error'][$i];
                   $this->getExt($ar['name']);//取得扩展名,赋给$this->ext,下次循环会更新
                   $this->setSavename($changeName == 1 ? '' : $ar['name']);//设置保存文件名
                   if($this->copyfile($ar)){
                     $this->returnArray[] =   $this->returninfo;
                   }else{
                     $this->returninfo['error'] = $this->errmsg();
                     $this->returnArray[] =   $this->returninfo;
                   }
            }
            return $this->errno ?   false :   true;
         }else{//上传单个文件
            $this->getExt($fileArr['name']);//取得扩展名
            $this->setSavename($changeName == 1 ? '' : $fileArr['name']);//设置保存文件名
            if($this->copyfile($fileArr)){
                   $this->returnArray[] =   $this->returninfo;
            }else{
                   $this->returninfo['error'] = $this->errmsg();
                   $this->returnArray[] =   $this->returninfo;
            }
            return $this->errno ?   false :   true;
         }
         return false;
       }else{
         $this->errno = 10;
         return false;
       }
}

以下为引用的内容:

// 单个文件上传
function copyfile($fileArray){
       $this->returninfo = array();
       // 返回信息
       $this->returninfo['name'] = $fileArray['name'];
       $this->returninfo['saveName'] = $this->saveName;
       $this->returninfo['size'] = number_format( ($fileArray['size'])/1024 , 0, '.', ' ');//以KB为单位
       $this->returninfo['type'] = $fileArray['type'];
       // 检查文件格式
       if (!$this->validateFormat()){
         $this->errno = 11;
         return false;
       }
       // 检查目录是否可写
       if(!@is_writable($this->savePath)){
         $this->errno = 12;
         return false;
       }
       // 如果不允许覆盖,检查文件是否已经存在
       if($this->overwrite == 0 && @file_exists($this->savePath.$fileArray['name'])){
         $this->errno = 13;
         return false;
       }
       // 如果有大小限制,检查文件是否超过限制
       if ($this->maxSize != 0 ){
         if ($fileArray["size"] > $this->maxSize){
            $this->errno = 14;
            return false;
         }
       }
       // 文件上传
       if(!@copy($fileArray["tmp_name"], $this->savePath.$this->saveName)){
         $this->errno = $fileArray["error"];
         return false;
       }elseif( $this->thumb ){//创建缩略图
         $CreateFunction = "imagecreatefrom".($this->ext == 'jpg' ? 'jpeg' : $this->ext);
         $SaveFunction = "image".($this->ext == 'jpg' ? 'jpeg' : $this->ext);
         if (strtolower($CreateFunction) == "imagecreatefromgif"
            && !function_exists("imagecreatefromgif")) {
            $this->errno = 16;
            return false;
         } elseif (strtolower($CreateFunction) == "imagecreatefromjpeg"
            && !function_exists("imagecreatefromjpeg")) {
            $this->errno = 17;
            return false;
         } elseif (!function_exists($CreateFunction)) {
            $this->errno = 18;
            return false;
         }
           
         $Original = @$CreateFunction($this->savePath.$this->saveName);
         if (!$Original) {$this->errno = 19; return false;}
         $originalHeight = ImageSY($Original);
         $originalWidth = ImageSX($Original);
         $this->returninfo['originalHeight'] = $originalHeight;
         $this->returninfo['originalWidth'] = $originalWidth;
         if (($originalHeight < $this->thumbHeight
            && $originalWidth < $this->thumbWidth)) {
            // 如果比期望的缩略图小,那只Copy
            copy($this->savePath.$this->saveName,
                   $this->savePath.$this->thumbPrefix.$this->saveName);
         } else {
            if( $originalWidth > $this->thumbWidth ){// 宽 > 设定宽度
                   $thumbWidth = $this->thumbWidth ;
                   $thumbHeight = $this->thumbWidth * ( $originalHeight / $originalWidth );
                   if($thumbHeight > $this->thumbHeight){//高 > 设定高度
                     $thumbWidth = $this->thumbHeight * ( $thumbWidth / $thumbHeight );
                     $thumbHeight = $this->thumbHeight ;
                   }
            }elseif( $originalHeight > $this->thumbHeight ){//高 > 设定高度
                   $thumbHeight = $this->thumbHeight ;
                   $thumbWidth = $this->thumbHeight * ( $originalWidth / $originalHeight );
                   if($thumbWidth > $this->thumbWidth){//宽 > 设定宽度
                     $thumbHeight = $this->thumbWidth * ( $thumbHeight / $thumbWidth );
                     $thumbWidth = $this->thumbWidth ;
                   }
            }
            if ($thumbWidth == 0) $thumbWidth = 1;
            if ($thumbHeight == 0) $thumbHeight = 1;
            $createdThumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
            if ( !$createdThumb ) {$this->errno = 20; return false;}
            if ( !imagecopyresampled($createdThumb, $Original, 0, 0, 0, 0,
                   $thumbWidth, $thumbHeight, $originalWidth, $originalHeight) )
                   {$this->errno = 21; return false;}
            if ( !$SaveFunction($createdThumb,
                   $this->savePath.$this->thumbPrefix.$this->saveName) )
                   {$this->errno = 22; return false;}
         }
       }
       // 删除临时文件
       if(!@$this->del($fileArray["tmp_name"])){
         return false;
       }
       return true;
}
 

以下为引用的内容:

// 文件格式检查,MIME检测
function validateFormat(){
       if(!is_array($this->fileFormat)
         || in_array(strtolower($this->ext), $this->fileFormat)
         || in_array(strtolower($this->returninfo['type']), $this->fileFormat) )
         return true;
       else
         return false;
}
//获取文件扩展名
function getExt($fileName){
       $ext = explode(".", $fileName);
       $ext = $ext[count($ext) - 1];
       $this->ext = strtolower($ext);
}

//设置上传文件的最大字节限制
// @param $maxSize 文件大小(bytes) 0:表示无限制
function setMaxsize($maxSize){
       $this->maxSize = $maxSize;
}
//设置文件格式限定
// @param $fileFormat 文件格式数组
function setFileformat($fileFormat){
       if(is_array($fileFormat)){$this->fileFormat = $fileFormat ;}
}

//设置覆盖模式
// @param overwrite 覆盖模式 1:允许覆盖 0:禁止覆盖
function setOverwrite($overwrite){
       $this->overwrite = $overwrite;
}


//设置保存路径
// @param $savePath 文件保存路径:以 "/" 结尾,若没有 "/",则补上
function setSavepath($savePath){
       $this->savePath = substr( str_replace("\","/", $savePath) , -1) == "/"
       ? $savePath : $savePath."/";
}

//设置缩略图
// @param $thumb = 1 产生缩略图 $thumbWidth,$thumbHeight 是缩略图的宽和高
function setThumb($thumb, $thumbWidth = 0,$thumbHeight = 0){
       $this->thumb = $thumb;
       if($thumbWidth) $this->thumbWidth = $thumbWidth;
       if($thumbHeight) $this->thumbHeight = $thumbHeight;
}

//设置文件保存名
// @saveName 保存名,如果为空,则系统自动生成一个随机的文件名
function setSavename($saveName){
       if ($saveName == ''){   // 如果未设置文件名,则生成一个随机文件名
         $name = date('YmdHis')."_".rand(100,999).'.'.$this->ext;
       } else {
         $name = $saveName;
       }
       $this->saveName = $name;
}

//删除文件
// @param $file 所要删除的文件名
function del($fileName){
       if(!@unlink($fileName)){
         $this->errno = 15;
         return false;
       }
       return true;
}

// 返回上传文件的信息
function getInfo(){
       return $this->returnArray;
}

// 得到错误信息
function errmsg(){
       $uploadClassError = array(
         0 =>'There is no error, the file uploaded with success. ',
         1 =>'The uploaded file exceeds the upload_max_filesize directive in php.ini.',
         2 =>'The uploaded file exceeds the MAX_FILE_SIZE that was specified in the HTML form.',
         3 =>'The uploaded file was only partially uploaded. ',
         4 =>'No file was uploaded. ',
         6 =>'Missing a temporary folder. Introduced in PHP 4.3.10 and PHP 5.0.3. ',
         7 =>'Failed to write file to disk. Introduced in PHP 5.1.0. ',
         10 =>'Input name is not unavailable!',
         11 =>'The uploaded file is Unallowable!',
         12 =>'Directory unwritable!',
         13 =>'File exist already!',
         14 =>'File is too big!',
         15 =>'Delete file unsuccessfully!',
         16 =>'Your version of PHP does not appear to have GIF thumbnailing support.',
         17 =>'Your version of PHP does not appear to have JPEG thumbnailing support.',
         18 =>'Your version of PHP does not appear to have pictures thumbnailing support.',
         19 =>'An error occurred while attempting to copy the source image .
                   Your version of php ('.phpversion().') may not have this image type support.',
         20 =>'An error occurred while attempting to create a new image.',
         21 =>'An error occurred while copying the source image to the thumbnail image.',
         22 =>'An error occurred while saving the thumbnail image to the filesystem.
                   Are you sure that PHP has been configured with both read and write access on this folder?',
            );
       if ($this->errno == 0)
         return false;
       else
         return $uploadClassError[$this->errno];
}
}
?>