it is easier to upload file in php than in asp:
move_uploaded_file()suggest you  to download a php manual

解决方案 »

  1.   

    php里上传的文件直接就存在硬盘上了。你只要copy一个到你想的目录即可。根本不需要象asp那样麻烦。
      

  2.   

    问题是我需要使用Delphi写一个客户端来上传文件,如果按照正常的方法,我就需要对要上传的文件进行文件编码,这样会造成要上传的数据增大(IE好像是用Base64编号二进制数据,这样比二进制文件要大1/3),而且这个过程也很麻烦。
      

  3.   

    我以前用ASP写,一次上传一个文件,直接上传的是文件的二进制数据,没有任何编码,然后在IIS那里,使用了ASP的Request.BinaryRead()取得上传的数据,保存为文件就可以了,速度很快。
      

  4.   

    用文件函数打开 php://input 文件
      

  5.   

    >>用文件函数打开 php://input 文件
    能详细一点吗?因为只会一点PHP基础,如果能给出一点代码,就更好了。可以再加分。谢谢。
      

  6.   

    <?
    print_r($_FILES);
    ?>
    PHP的上传处理,太简单了。
      

  7.   

    找到了,php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。http://php.chinaunix.net/manual/zh/wrappers.php.php谢谢xuzuning(唠叨);
      

  8.   

    一个文件上传的CLASS:
    class UploadFile
    {
    var $errorMessage =array(
    1 => 'File type Error!',
    2 => 'Save path not viable, please contact system administrators',
    3 => 'error no#3', //文件已存在
    4 => 'error no#4', //不知名错误
    5 => 'error no#5'   //文件太大
    );
    var $file;
    var $file_name;
    var $file_size;
    var $file_type; /** 保存名 */
    var $savename;
    /** 保存路径 */
    var $savepath;
    /** 文件格式限定 */
    var $fileformat = array();
    /** 覆盖模式 */
    var $overwrite = 0;
    /** 文件最大字节 */
    var $maxsize = 0;
    /** 文件扩展名 */
    var $ext;
    /** 错误代号 */
    var $errno;
    /**
         * 构造函数
         * @param $fileArr 文件信息数组 'file' 临时文件所在路径及文件名
                                        'name' 上传文件名
                                        'size' 上传文件大小
                                        'type' 上传文件类型
         * @param savename 文件保存名
         * @param savepath 文件保存路径
         * @param fileformat 文件格式限制数组
         * @param overwriet 是否覆盖 1 允许覆盖 0 禁止覆盖
         * @param maxsize 文件最大尺寸
         */
    function UploadFile($file, $savename, $savepath, $fileformat, $overwrite = 0, $maxsize = 0)
    {
    $this->file = $_FILES[$file]['tmp_name'];
    $this->file_name = $_FILES[$file]['name'];
    $this->maxsize = $_FILES[$file]['size'];
    $this->file_type = $_FILES[$file]['type']; $this->get_ext();
    $this->set_savepath($savepath);
    $this->set_fileformat($fileformat);
    $this->set_overwrite($overwrite);
    $this->set_savename($savename);
    $this->set_maxsize($maxsize);
    } /**
    *@return  bool
    *@abstract  開始上傳
    */
    function run()
    {
    /** 检查文件格式 */
    if (!$this->validate_format())
    {
    $this->errno = 1;
    return false;
    }
    /** 检查目录是否可写 */
    if(!@is_writable($this->savepath))
    {
    $this->errno = 2;
    return false;
    }
    /** 如果不允许覆盖,检查文件是否已经存在 */
    if($this->overwrite == 0 && @file_exists($this->savepath.$this->savename))
    {
    $this->errno = 3;
    return false;
    }
    /** 如果有大小限制,检查文件是否超过限制 */
    if ($this->maxsize != 0 )
    {
    if ($this->file_size > $this->maxsize)
    {
    $this->errno = 5;
    return false;
    }
    }
    /** 文件上传 */
    if(!is_array($this->file))
    {
    if(!@copy($this->file, $this->savepath.$this->savename))
    {
    $this->errno = 4;
    return false;
    }
    }else {
    for($i=0; $i<count($this->file); $i++)
    {
    if (!@copy($this->file[$i], $this->savepath.$this->savename[$i]))
    {
    $this->errno = 4;
    return false;
    }
    }
    }
    /** 删除临时文件 */
    $this->destory();
    return $this->savename;
    } /**
         * 文件格式检查
         * @access protect
         */
    function validate_format()
    {
    if (!is_array($this->fileformat))  // 没有格式限制
      return true;
    if( !is_array($this->ext) )
    {
    $ext = strtolower($this->ext);
    reset($this->fileformat);
    while(list($var, $key) = each($this->fileformat))
    {
    if (strtolower($key) == $ext)
    return true;
    }
    reset($this->fileformat);
    }else {
    $loop = true;
    $fileFormatClone = array_flip($this->fileformat);
    for ($i=0; $i<count($this->ext); $i++)
    {
    if( !array_key_exists($this->ext[$i], $fileFormatClone)) return false;
    }
    return true;
    }
    return false;
    } /**
         * 获取文件扩展名
         * access public
         */
    function get_ext()
    {
    if (!is_array($this->file_name))
    {
    $ext = explode(".", $this->file_name);
    $ext = $ext[count($ext) - 1];
    $this->ext = $ext;
    }else {
    for ($i=0; $i<count($this->file_name); $i++)
    {
    $tempExt = explode(".", $this->file_name[$i]);
    $tempExt = $tempExt[count($tempExt) - 1];
    $extArr[$i] = $tempExt;
    }
    $this->ext = $extArr;
    }
    print_r($extArr);
    } /**
         * 设置上传文件的最大字节限制
         * @param $maxsize 文件大小(bytes) 0:表示无限制
         * @access public
         */
    function set_maxsize($maxsize)
    {
    $this->maxsize = $maxsize;
    } /**
         * 设置覆盖模式
         * @param 覆盖模式 1:允许覆盖 0:禁止覆盖
         * @access public
         */
    function set_overwrite($overwrite)
    {
    $this->overwrite = $overwrite;
    } /**
         * 设置允许上传的文件格式
         * @param $fileformat 允许上传的文件扩展名数组
         * @access public
         */
    function set_fileformat($fileformat)
    {
    $this->fileformat = $fileformat;
    } /**
         * 设置保存路径
         * @param $savepath 文件保存路径:以 "/" 结尾
         * @access public
         */
    function set_savepath($savepath)
    {
    $this->savepath = $savepath;
    }
    /**
         * 设置文件保存名
         * @savename 保存名,如果为空,则系统自动生成一个随机的文件名
         * @access public
         */
    function set_savename($savename)
    {
    if ($savename == '')  // 如果未设置文件名,则生成一个随机文件名
    {
    if(!is_array($this->file))
    {
    srand ((double) microtime() * 1000000);
    $rnd =(string) rand(100,9999);
    $name = date('Ymdhis').$rnd;
    $name = $name.".".$this->ext;
    }else {
    //多文件處理
    for ($i=0; $i<count($this->file); $i++)
    {
    srand ((double) microtime() * 1000000);
    $rnd = rand(100,999);
    $tempName = date('Ymdhis').$rnd;
    $tempName = $tempName.".".$this->ext[$i];
    $name[$i] = $tempName;
    }
    }
    } else {
    $name = $savename;
    }
    $this->savename = $name.'.'.$this->ext;
    }
    /**
         * 删除文件
         * @param $file 所要删除的文件名
         * @access public
         */
    function del($file)
    {
    if(!@unlink($file))
    {
    $this->errno = 3;
    return false;
    }
    return true;
    }
    /**
         * 删除临时文件
         * @access proctect
         */
    function destory()
    {
    if (!is_array($this->file))
    {
    $this->del($this->file);
    }else {
    for ($i=0; $i<count($this->file); $i++)
    {
    $this->del($this->file[$i]);
    }
    }
    } /**
         * 得到错误信息
        * @access public
          * @return error msg string or false
         */
    function errmsg()
    {
    global $UPLOAD_CLASS_ERROR;
    if ($this->errno == 0)
    return false;
    else
    return $this->errorMessage[$this->errno];
    }

    /**
     * 返回保存后的文件名
     *
     * @return string
     */
    function get_save_name()
    {
        return $this->savename;
    }
    }
    ex.
    if ($Submit != '')
    {
    $fileArr['file'] = $file;
    $fileArr['name'] = $file_name;
    $fileArr['size'] = $file_size;
    $fileArr['type'] = $file_type;
    //所允许上传的文件类型
    $filetypes = array('gif','jpg','jpge','png');
    //文件上传目录
    $savepath = "/usr/htdocs/upload/";
    //没有最大限制 0 无限制
    $maxsize = 0;
    //覆盖 0 不允许  1 允许
    $overwrite = 0;
    $upload = new UploadFile($fileArr, $file_name, $savepath, $filetypes, $overwrite, $maxsize);
    if (!$upload->run())
    {
    echo  "上传失败".$upload->errmsg();
    }
    }
    <html>
    <head>
    <title>文件上传</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head><body bgcolor="#FFFFFF" text="#000000">
    <form name="form1" enctype="multipart/form-data" method="post" action="">
    <input type="file" name="file">
    <input type="submit" name="Submit" value="Submit">
    </form>
    </body>
    </html>
      

  9.   

    只有xuzuning(唠叨)能理解我的意思。
    我昨天试了一下,在IIS装PHP(CGI 模式),运行
    $httprawpostdata = file_get_contents("php://input");
    脚本超时,不知linux下,会不会这样。
      

  10.   

    唠叨所说的php://input正是我要的。php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。
    http://php.chinaunix.net/manual/zh/wrappers.php.php在Linux下的PHP试验成功。