文件夹就没试过了!
但一次上传多个文件就可以!
请看:
<form enctype="multipart/form-data" action="$PHP_SELF" method="post">
<input type="file" name="upfile[]"><BR>
<input type="file" name="upfile[]"><BR>
同上;
同上;
想上传多少个,就有多少个同上~!
</form>
<?
这里就可以用数组来取得上传的文件了!
如:upfile_name[0];//第一个文件
upfile_name[1];//第二个文件
如此类推!

解决方案 »

  1.   

    谢谢,seebi(芝See菇Bi)
    上传的功能我已经实现了,现在问的主要是如何上传一个文件夹???
      

  2.   

    to cf_journey(陶醉)
    思路当然不错,可如何让用户指定呢,只能用户手动输入吗,不可以通过浏览的方式选择。读取一个文件夹下的全部文件如何实现呢,有代码吗?
      

  3.   

    如果不通过客户端软件是不能实现的。只能通过zip上传,用PHP解压。关于使用PHP解压,可以看看php的手册 php4.2.0以上有自己的zip API要是php4.2.0以下 下边是一段加压的程式 摘自 phpzip 1.6-------------<?php
    /* $Id: zip.lib.php,v 1.6 2002/03/30 08:244 loic1 Exp $ */
    /**
     * Zip file creation class.
     * Makes zip files.
     *
     * Based on :
     *
     *  <a href="http://www.zend.com/codex.php?id=535&single=1" target=_blank>http://www.zend.com/codex.php?id=535&single=1</a>
     *  By Eric Mueller <<a href="mailto:[email protected]">[email protected]</a>>
     *
     *  <a href="http://www.zend.com/codex.php?id=470&single=1" target=_blank>http://www.zend.com/codex.php?id=470&single=1</a>
     *  by Denis125 <<a href="mailto:[email protected]">[email protected]</a>>
     *
     *  a patch from Peter Listiak <<a href="mailto:[email protected]">[email protected]</a>> for last modified
     *  date and time of the compressed file
     *
     * Official ZIP file format: <a href="http://www.pkware.com/appnote.txt" target=_blank>http://www.pkware.com/appnote.txt</a>
     *
     * @access  public
     */
    class zipfile
    {
        /**
         * Array to store compressed data
         *
         * @var  array    $datasec
         */
        var $datasec      = array();    /**
         * Central directory
         *
         * @var  array    $ctrl_dir
         */
        var $ctrl_dir     = array();    /**
         * End of central directory record
         *
         * @var  string   $eof_ctrl_dir
         */
        var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";    /**
         * Last offset position
         *
         * @var  integer  $old_offset
         */
        var $old_offset   = 0;
        /**
         * Converts an Unix timestamp to a four byte DOS date and time format (date
         * in high two bytes, time in low two bytes allowing magnitude comparison).
         *
         * @param  integer  the current Unix timestamp
         *
         * @return integer  the current date in a four byte DOS format
         *
         * @access private
         */
        function unix2DosTime($unixtime = 0) {
            $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);        if ($timearray['year'] < 1980) {
             $timearray['year']    = 1980;
             $timearray['mon']     = 1;
             $timearray['mday']    = 1;
             $timearray['hours']   = 0;
             $timearray['minutes'] = 0;
             $timearray['seconds'] = 0;
            } // end if        return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
                    ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
        } // end of the 'unix2DosTime()' method
        /**
         * Adds "file" to archive
         *
         * @param  string   file contents
         * @param  string   name of the file in the archive (may contains the path)
         * @param  integer  the current timestamp
         *
         * @access public
         */
        function addFile($data, $name, $time = 0)
        {
            $name     = str_replace('\\', '/', $name);        $dtime    = dechex($this->unix2DosTime($time));
            $hexdtime = '\x' . $dtime[6] . $dtime[7]
                      . '\x' . $dtime[4] . $dtime[5]
                      . '\x' . $dtime[2] . $dtime[3]
                      . '\x' . $dtime[0] . $dtime[1];
            eval('$hexdtime = "' . $hexdtime . '";');        $fr   = "\x50\x4b\x03\x04";
            $fr   .= "\x14\x00";            // ver needed to extract
            $fr   .= "\x00\x00";            // gen purpose bit flag
            $fr   .= "\x08\x00";            // compression method
            $fr   .= $hexdtime;             // last mod time and date        // "local file header" segment
            $unc_len = strlen($data);
            $crc     = crc32($data);
            $zdata   = gzcompress($data);
            $zdata   = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
            $c_len   = strlen($zdata);
            $fr      .= pack('V', $crc);             // crc32
            $fr      .= pack('V', $c_len);           // compressed filesize
            $fr      .= pack('V', $unc_len);         // uncompressed filesize
            $fr      .= pack('v', strlen($name));    // length of filename
            $fr      .= pack('v', 0);                // extra field length
            $fr      .= $name;        // "file data" segment
            $fr .= $zdata;        // "data descriptor" segment (optional but necessary if archive is not
            // served as file)
            $fr .= pack('V', $crc);                 // crc32
            $fr .= pack('V', $c_len);               // compressed filesize
            $fr .= pack('V', $unc_len);             // uncompressed filesize        // add this entry to array
            $this -> datasec[] = $fr;
            $new_offset        = strlen(implode('', $this->datasec));        // now add to central directory record
            $cdrec = "\x50\x4b\x01\x02";
            $cdrec .= "\x00\x00";                // version made by
            $cdrec .= "\x14\x00";                // version needed to extract
            $cdrec .= "\x00\x00";                // gen purpose bit flag
            $cdrec .= "\x08\x00";                // compression method
            $cdrec .= $hexdtime;                 // last mod time & date
            $cdrec .= pack('V', $crc);           // crc32
            $cdrec .= pack('V', $c_len);         // compressed filesize
            $cdrec .= pack('V', $unc_len);       // uncompressed filesize
            $cdrec .= pack('v', strlen($name) ); // length of filename
            $cdrec .= pack('v', 0 );             // extra field length
            $cdrec .= pack('v', 0 );             // file comment length
            $cdrec .= pack('v', 0 );             // disk number start
            $cdrec .= pack('v', 0 );             // internal file attributes
            $cdrec .= pack('V', 32 );            // external file attributes - 'archive' bit set        $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
            $this -> old_offset = $new_offset;        $cdrec .= $name;        // optional extra field, file comment goes here
            // save to central directory
            $this -> ctrl_dir[] = $cdrec;
        } // end of the 'addFile()' method
        /**
         * Dumps out file
         *
         * @return  string  the zipped file
         *
         * @access public
         */
        function file()
        {
            $data    = implode('', $this -> datasec);
            $ctrldir = implode('', $this -> ctrl_dir);        return
                $data .
                $ctrldir .
                $this -> eof_ctrl_dir .
                pack('v', sizeof($this -> ctrl_dir)) .  // total # of entries "on this disk"
                pack('v', sizeof($this -> ctrl_dir)) .  // total # of entries overall
                pack('V', strlen($ctrldir)) .           // size of central dir
                pack('V', strlen($data)) .              // offset to start of central dir
                "\x00\x00";                             // .zip file comment length
        } // end of the 'file()' method} // end of the 'zipfile' class
    ?>
      

  4.   

    PS: 到 http://phpconcept.free.fr/phpzip-index.en.php3 下载phpzip
      

  5.   

    to  KBUG(爱睡觉的猫)
    你说的工作原理是不是要用户自己将一个文件夹压缩后在以.zip的形式上传呢。如是这样的话,太复杂。
      

  6.   

    Right..That's the only way ...