返回列表 回复 发帖

多文件上载系统完整版

多文件上载系统完整版
作者:unknown 更新时间: 2005-03-17     
  1. <?php
  2. //多文件上载系统完整版
  3. //功能强大,可任意控制上载文件数,是否覆盖
  4. include("../include/common.inc");
  5. $title = "多个文件的上载程序";
  6. include("../include/header.inc");
  7. //定义允许上载文件的数目
  8. define("UPLOAD_NO", 10);
  9. echo("<p align=';center';><font size=';4'; color=';#000080';>欢迎您!<br>一次可以最多上载".UPLOAD_NO."个文件<br><HR>n");
  10. if($REQUEST_METHOD!="POST"){
  11.     echo("<form enctype="multipart/form-data" method=post>n");
  12.     echo("<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="3000000">n");
  13.      
  14.     for($i=1;$i<=UPLOAD_NO;$i++){
  15.         echo("<input type=file name=infile$i>   ");
  16.         if($i%2==0)
  17.         echo("<br>n");
  18.     }
  19.      
  20.     echo("<br><br><input type="checkbox" name="overload" value="ON"></font> <font color=';#ff0000';>是否覆盖已经存在的文件?</font>");
  21.     echo("<br><br><input type=submit value=上载></form>n");
  22. }
  23. else{
  24.     //处理上载
  25.     $noinput = true;
  26.     for($i=1;$noinput&&($i<=UPLOAD_NO);$i++){
  27.          if(${"infile".$i}!="none") $noinput = false;
  28.     }
  29.     if($noinput){
  30.         echo("<font size=';4'; color=';#000080';>没有选定的文件,返回重试</font>");
  31.         exit();
  32.     }
  33.     echo("<p align=';center';><font size=';4'; color=';#000080';>您选中的文件已经成功地上载到服务器的临时目录!</font><br>");         
  34.     echo("<table border=';1'; width=';84%'; height=';52'; bordercolorlight=';#008080'; bordercolordark=';#008080';>
  35.         <tr>
  36.             <td width=';14%'; bgcolor=';#008000'; height=';21';><font color=';#FFFFFF';>文件号</font></td>
  37.             <td width=';52%'; bgcolor=';#008000'; height=';21';><font color=';#FFFFFF';>文件名称</font></td>
  38.             <td width=';34%'; bgcolor=';#008000'; height=';21';><font color=';#FFFFFF';>文件大小</font></td>
  39.         </tr>");
  40.     for($i=1;$i<=UPLOAD_NO;$i++){
  41.         $just=${"infile".$i."_size"};
  42.         $fp_size[i] = $just;
  43.          
  44.         if($overload!=ON){
  45.             if(file_exists(AddSlashes(dirname($PATH_TRANSLATED))."\upload\".${"infile".$i."_name"}))
  46.                 echo "<font size=';4'; color=';#ff0000';>您上载的文件<font color=';#000000';>".${"infile".$i."_name"}."</font>已经存在,该文件拷贝失败!</font><br>";
  47.             else{
  48.                 if(${"infile".$i}!="none"&?(${"infile".$i},AddSlashes(dirname($PATH_TRANSLATED))."/upload/".${"infile".$i."_name"})&&unlink(${"infile".$i})){
  49.                 $str = ${"infile".$i."_name"};
  50.                 echo("<tr>
  51.                     <td width=';14%'; height=';19';>$i</td>
  52.                     <td width=';52%'; height=';19';>$str</td>
  53.                     <td width=';34%'; height=';19';>$fp_size[i]</td>
  54.                     </tr>");
  55.                   }
  56.             }
  57.         }
  58.         else{
  59.             if(${"infile".$i}!="none"&?(${"infile".$i},AddSlashes(dirname($PATH_TRANSLATED))."upload".${"infile".$i."_name"})&&unlink(${"infile".$i})){
  60.                 $str = ${"infile".$i."_name"};
  61.                 echo("<tr>
  62.                     <td width=';14%'; height=';19';>$i</td>
  63.                     <td width=';52%'; height=';19';>$str</td>
  64.                     <td width=';34%'; height=';19';>$fp_size[i]</td>
  65.                     </tr>");
  66.             }
  67.         }
  68.     }
  69.     echo "</table>";            
  70. }
  71. include("../include/footer.inc");
  72.          
  73. ?>  
复制代码

upload.php
  1. <?php
  2. include_once "upload.class.php";
  3. if (&#36;Submit != ';';)
  4. {
  5.     &#36;fileArr[';file';] = &#36;file;
  6.     &#36;fileArr[';name';] = &#36;file_name;
  7.     &#36;fileArr[';size';] = &#36;file_size;
  8.     &#36;fileArr[';type';] = &#36;file_type;
  9.     /** 所允许上传的文件类型 */
  10.     &#36;filetypes = array(';gif';,';jpg';,';jpge';,';png';);
  11.     /** 文件上传目录 */
  12.     &#36;savepath = "/usr/htdocs/upload/";
  13.     /** 没有最大限制 0 无限制*/
  14.     &#36;maxsize = 0;
  15.     /** 覆盖 0 不允许  1 允许 */
  16.     &#36;overwrite = 0;
  17.     &#36;upload = new upload(&#36;fileArr, &#36;file_name, &#36;savepath, &#36;filetypes, &#36;overwrite, &#36;maxsize);
  18.     if (!&#36;upload->run())
  19.     {
  20.      echo  "上传失败".&#36;upload->errmsg();
  21.     }
  22. }
  23. ?>
  24. <html>
  25. <head>
  26. <title>文件上传</title>
  27. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  28. </head>
  29. <body bgcolor="&#35;FFFFFF" text="&#35;000000">
  30. <form name="form1" enctype="multipart/form-data" method="post" action="">
  31.   <input type="file" name="file">
  32.   <input type="submit" name="Submit" value="Submit">
  33. </form>
  34. </body>
  35. </html>
复制代码

upload.class.php
  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | 文件上传                                                             |
  5. // | 本代码仅供学习讨论之用,允许随意修改                                 |
  6. // | Author: whxbb(whxbb@21cn.com)                                        |
  7. // +----------------------------------------------------------------------+
  8. //
  9. // &#36;Id: upload.class.php,v 1.0 2001/10/14 14:06:57 whxbb Exp &#36;
  10. //
  11. &#36;UPLOAD_CLASS_ERROR = array( 1 => ';不允许上传该格式文件';,
  12.                              2 => ';目录不可写';,
  13.                              3 => ';文件已存在';,
  14.                              4 => ';不知名错误';,
  15.                              5 => ';文件太大';
  16.                             );
  17. /**
  18. * Purpose
  19. * 文件上传
  20. *
  21. * Example
  22. *
  23.     &#36;fileArr[';file';] = &#36;file;
  24.     &#36;fileArr[';name';] = &#36;file_name;
  25.     &#36;fileArr[';size';] = &#36;file_size;
  26.     &#36;fileArr[';type';] = &#36;file_type;
  27.     // 所允许上传的文件类型
  28.     &#36;filetypes = array(';gif';,';jpg';,';jpge';,';png';);
  29.     // 文件上传目录
  30.     &#36;savepath = "/usr/htdocs/upload/";
  31.     // 没有最大限制 0 无限制
  32.     &#36;maxsize = 0;
  33.     // 覆盖 0 不允许  1 允许
  34.     &#36;overwrite = 0;
  35.     &#36;upload = new upload(&#36;fileArr, &#36;file_name, &#36;savepath, &#36;filetypes, &#36;overwrite, &#36;maxsize);
  36.     if (!&#36;upload->run())
  37.     {
  38.      echo   &#36;upload->errmsg();
  39.     }
  40. *
  41. * @author whxbb(whxbb@21cn.com)
  42. * @version 0.1
  43. */
  44. class upload
  45. {
  46.     var &#36;file;
  47.     var &#36;file_name;
  48.     var &#36;file_size;
  49.     var &#36;file_type;
  50.     /** 保存名 */
  51.     var &#36;savename;
  52.     /** 保存路径 */
  53.     var &#36;savepath;
  54.     /** 文件格式限定 */
  55.     var &#36;fileformat = array();
  56.     /** 覆盖模式 */
  57.     var &#36;overwrite = 0;
  58.     /** 文件最大字节 */
  59.     var &#36;maxsize = 0;
  60.     /** 文件扩展名 */
  61.     var &#36;ext;
  62.     /** 错误代号 */
  63.     var &#36;errno;
  64.     /**
  65.      * 构造函数
  66.      * @param &#36;fileArr 文件信息数组 ';file'; 临时文件所在路径及文件名
  67.                                     ';name'; 上传文件名
  68.                                     ';size'; 上传文件大小
  69.                                     ';type'; 上传文件类型
  70.      * @param savename 文件保存名
  71.      * @param savepath 文件保存路径
  72.      * @param fileformat 文件格式限制数组
  73.      * @param overwriet 是否覆盖 1 允许覆盖 0 禁止覆盖
  74.      * @param maxsize 文件最大尺寸
  75.      */
  76.     function upload(&#36;fileArr, &#36;savename, &#36;savepath, &#36;fileformat, &#36;overwrite = 0, &#36;maxsize = 0) {
  77.         &#36;this->file = &#36;fileArr[';file';];
  78.         &#36;this->file_name = &#36;fileArr[';name';];
  79.         &#36;this->file_size = &#36;fileArr[';size';];
  80.         &#36;this->file_type = &#36;fileArr[';type';];
  81.         &#36;this->get_ext();
  82.         &#36;this->set_savepath(&#36;savepath);
  83.         &#36;this->set_fileformat(&#36;fileformat);
  84.         &#36;this->set_overwrite(&#36;overwrite);
  85.         &#36;this->set_savename(&#36;savename);
  86.         &#36;this->set_maxsize(&#36;maxsize);
  87.     }
  88.     /** 上传  */
  89.     function run()
  90.     {
  91.         /** 检查文件格式 */
  92.         if (!&#36;this->validate_format())
  93.         {
  94.             &#36;this->errno = 1;
  95.             return false;
  96.         }
  97.         /** 检查目录是否可写 */
  98.         if(!@is_writable(&#36;this->savepath))
  99.         {
  100.             &#36;this->errno = 2;
  101.             return false;
  102.         }
  103.         /** 如果不允许覆盖,检查文件是否已经存在 */
  104.         if(&#36;this->overwrite == 0 && @file_exists(&#36;this->savepath.&#36;this->savename))
  105.         {
  106.             &#36;this->errno = 3;
  107.             return false;
  108.         }
  109.         /** 如果有大小限制,检查文件是否超过限制 */
  110.         if (&#36;this->maxsize != 0 )
  111.         {
  112.             if (&#36;this->file_size > &#36;this->maxsize)
  113.             {
  114.                 &#36;this->errno = 5;
  115.                 return false;
  116.             }
  117.         }
  118.         /** 文件上传 */
  119.        if(!@copy(&#36;this->file, &#36;this->savepath.&#36;this->savename))
  120.        {
  121.             &#36;this->errno = 4;
  122.             return false;
  123.        }
  124.        /** 删除临时文件 */
  125.        &#36;this->destory();
  126.        return true;
  127.     }
  128.     /**
  129.      * 文件格式检查
  130.      * @access protect
  131.      */
  132.     function validate_format()
  133.     {
  134.         if (!is_array(&#36;this->fileformat))  // 没有格式限制
  135.             return true;
  136.        &#36;ext = strtolower(&#36;this->ext);
  137.         reset(&#36;this->fileformat);
  138.         while(list(&#36;var, &#36;key) = each(&#36;this->fileformat))
  139.         {
  140.             if (strtolower(&#36;key) == &#36;ext)
  141.                 return true;
  142.         }
  143.         reset(&#36;this->fileformat);
  144.         return false;
  145.     }
  146.     /**
  147.      * 获取文件扩展名
  148.      * access public
  149.      */
  150.     function get_ext()
  151.     {
  152.         &#36;ext = explode(".", &#36;this->file_name);
  153.         &#36;ext = &#36;ext[count(&#36;ext) - 1];
  154.         &#36;this->ext = &#36;ext;
  155.     }
  156.     /**
  157.      * 设置上传文件的最大字节限制
  158.      * @param &#36;maxsize 文件大小(bytes) 0:表示无限制
  159.      * @access public
  160.      */
  161.     function set_maxsize(&#36;maxsize)
  162.     {
  163.         &#36;this->maxsize = &#36;maxsize;
  164.     }
  165.     /**
  166.      * 设置覆盖模式
  167.      * @param 覆盖模式 1:允许覆盖 0:禁止覆盖
  168.      * @access public
  169.      */
  170.     function set_overwrite(&#36;overwrite)
  171.     {
  172.         &#36;this->overwrite = &#36;overwrite;
  173.     }
  174.     /**
  175.      * 设置允许上传的文件格式
  176.      * @param &#36;fileformat 允许上传的文件扩展名数组
  177.      * @access public
  178.      */
  179.     function set_fileformat(&#36;fileformat)
  180.     {
  181.         &#36;this->fileformat = &#36;fileformat;
  182.     }
  183.     /**
  184.      * 设置保存路径
  185.      * @param &#36;savepath 文件保存路径:以 "/" 结尾
  186.      * @access public
  187.      */
  188.     function set_savepath(&#36;savepath)
  189.     {
  190.         &#36;this->savepath = &#36;savepath;
  191.     }
  192.     /**
  193.      * 设置文件保存名
  194.      * @savename 保存名,如果为空,则系统自动生成一个随机的文件名
  195.      * @access public
  196.      */
  197.     function set_savename(&#36;savename)
  198.     {
  199.         if (&#36;savename == ';';)  // 如果未设置文件名,则生成一个随机文件名
  200.         {
  201.             srand ((double) microtime() * 1000000);
  202.             &#36;rnd = rand(100,999);
  203.             &#36;name = date(';Ymdhis';) + &#36;rnd;
  204.             &#36;name = &#36;name.".".&#36;this->ext;
  205.         } else {
  206.             &#36;name = &#36;savename;
  207.         }
  208.         &#36;this->savename = &#36;name;
  209.     }
  210.     /**
  211.      * 删除文件
  212.      * @param &#36;file 所要删除的文件名
  213.      * @access public
  214.      */
  215.     function del(&#36;file)
  216.     {
  217.         if(!@unlink(&#36;file))
  218.         {
  219.             &#36;this->errno = 3;
  220.             return false;
  221.         }
  222.         return true;
  223.     }
  224.     /**
  225.      * 删除临时文件
  226.      * @access proctect
  227.      */
  228.     function destory()
  229.     {
  230.         &#36;this->del(&#36;this->file);
  231.     }
  232.     /**
  233.      * 得到错误信息
  234.     * @access public
  235.       * @return error msg string or false
  236.      */
  237.     function errmsg()
  238.     {
  239.         global &#36;UPLOAD_CLASS_ERROR;
  240.         
  241.         if (&#36;this->errno == 0)
  242.             return false;
  243.         else
  244.             return &#36;UPLOAD_CLASS_ERROR[&#36;this->errno];
  245.     }
  246. }
  247. ?>
复制代码

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表