小弟用了很多时间, 学会了php, 搞了www.kingofcoder.com 编程王网站, 请大家支持一下.
这站已经用了我很多钱买伺服器了, 希望能够搞一个出名的编程资源网
谢谢

解决方案 »

  1.   


    <?php
    /**
     * Allow upload multiple files. Most cells in two.
     *
     * @author Johin.Xub
     * @version 0.1alpha
     */
    class JUpload
    {
    private $_files = null;
    private $_configItems = array(
       'max_allow_size' => '' ,
       'allow_types' => '' ,
       'error_msgs' => array(),
       'display_name' => '',
       'save_path' => '',
       'save_prefix' => ''
       ); private $_default_save_path = '';
    private $_default_max_allow_size = 0;
    private $_default_allow_types = '*';
    private $_default_error_msgs = array(
    UPLOAD_ERR_OK => '文件上传成功!',
    UPLOAD_ERR_INI_SIZE  => '文件尺寸超过系统允许的最大值! 上传失败!',
    UPLOAD_ERR_FORM_SIZE => '文件尺寸超过表单规定的值! 上传失败!',
    UPLOAD_ERR_PARTIAL => '文件上传不完整! 上传失败!',
    UPLOAD_ERR_NO_FILE  => '没有被选定的文件上传! ',
    UPLOAD_ERR_NO_TMP_DIR  => '上次文件不能够保存到临时目录! 上传失败!',
    UPLOAD_ERR_CANT_WRITE => '文件上传到临时目录不允许保存文件! 上传失败!',
    'NOT_ALLOW_TYPE' => '不允许的文件类型! 上传失败!',
    'NOT_ALLOW_SIZE' => '文件尺寸太大了! 上传失败!',
    'CREATE_DIR_ERR' => '创建文件保存目录失败! 上传失败!',
    'CREATE_FILE_ERR' => '保存文件失败!上传失败!'
    );
    //-----------------------------------------------------------------------
    /**
     * @param array
     */
    public function __construct($configs=array())
    {
    $this->_fetchAllFiles(); $this->_default_max_allow_size = ini_get('upload_max_filesize');
    $this->_default_save_path = $_SERVER["DOCUMENT_ROOT"].'/public/up';
    //TMPDIR $this->initialize($configs);
    }
    //--------------------------------------------------------------------
    /**
     * Get all file fields .
     */
    private function _fetchAllFiles()
    {
    $filesArray =& $_FILES;
    foreach($filesArray as $field=>$values)
    {
    if(is_array($values['name']))
    {
    foreach($filesArray[$field]['name'] as $key=>$value)
    {
    $tArray['name'] =& $filesArray[$field]['name'][$key];
    $tArray['type'] =& $filesArray[$field]['type'][$key];
    $tArray['tmp_name'] =& $filesArray[$field]['tmp_name'][$key];
    $tArray['error'] =& $filesArray[$field]['error'][$key];
    $tArray['size'] =& $filesArray[$field]['size'][$key];
    $this->_files[$field.'['.$key.']'] = $tArray;
    }
    }
    else
    {
    $this->_files[$field] = $values;
    }
    }
    } //---------------------------------------------------------------------
    /**
     * Initialize and config all the conifigritions.
     * The $configs param is an array like below.
     * $configs = array(
     *  'fieldname1' => array(
     *  'display_name' =>'value',
     *  'max_allow_size'=>'value',
     *  'allow_types' =>'value',
     *  'error_msgs' =>array()
     *  ),
     *  'fieldname2' => array(
     *  'display_name' =>'value',
     *  'max_allow_size'=>'value',
     *  'allow_types' =>'value',
     *  'error_msgs' =>array()
     *  ),
     *  'fieldname3' => array(
     *  'display_name' =>'value',
     *  'max_allow_size'=>'value',
     *  'allow_types' =>'value',
     *  'error_msgs' =>array()
     *  )
     *  );
     */
    public function initialize($params=array(), $config_all=false)
    {
    if($config_all)
    {
    foreach($this->_files as $field=>$values)
    {
    $this->_files[$field] = array_merge($this->_files[$field], $params[0]);
    }
    }
    else
    {
    foreach($params as $key=>$configs)
    {
    $this->_files[$key] = array_merge($this->_files[$key], $configs);
    }
    } $i = 0;
    foreach($this->_files as $fieldKey=>$fieldValue)
    {
    if(!@$this->_files[$fieldKey]['display_name'])
    {
    $this->_files[$fieldKey]['display_name'] = '第 '.++$i.' 个文件';
    }
    if(!@$this->_files[$fieldKey]['max_allow_size'])
    {
    $this->_files[$fieldKey]['max_allow_size'] =& $this->_default_max_allow_size;
    }
    if(!@$this->_files[$fieldKey]['allow_types'])
    {
    $this->_files[$fieldKey]['allow_types'] =& $this->_default_allow_types;
    }
    if(!@$this->_files[$fieldKey]['error_msgs'])
    {
    $this->_files[$fieldKey]['error_msgs'] =& $this->_default_error_msgs;
    }
    elseif(!is_array(@$this->_files[$fieldKey]['error_msgs']))
    {
    $this->_files[$fieldKey]['error_msgs'] =& $this->_default_error_msgs;
    }
    foreach($this->_default_error_msgs as $error_type=>$error_msg)
    {
    if(!@$this->_files[$fieldKey]['error_msgs'][$error_type])
    {
    $this->_files[$fieldKey]['error_msgs'][$error_type] =& $this->_default_error_msgs[$error_type];
    }
    }
    // if(!@$this->_files[$fieldKey]['save_path'])
    // {
    // $this->_files[$fieldKey]['save_path'] =& $this->_default_save_path;
    // }
    } $this->_exts();
    } //----------------------------------------------------------------------
    /**
     * Get all file's extension.
     */
    private function _exts($fieldName='')
    {
    $ext = null;
    if($fieldName)
    {
    $this->_files[$fieldName]['ext'] = $this->_ext($this->_files[$fieldName]['name']);
    $ext =& $this->_files[$fieldName]['ext'];
    }
    else
    {
    foreach($this->_files as $key=>$values)
    {
    $this->_files[$key]['ext'] = $this->_ext($this->_files[$key]['name']);
    $ext[$key] =& $this->_files[$key]['ext'];
    }
    } return $ext;
    }
    //----------------------------------------------------------------------
    /**
     * Get file's extension by uri.
     */
    private function _ext($uri)
    {
    $uriFrages = explode('.', $uri);
    if(count($uriFrages)<2)
    {
    return '';
    }
    else
    {
    return array_pop($uriFrages);
    }
    }
    //---------------------------------------------------------------------
    /**
     * Do upload.
     */
    public function doUpload()
    {
    $this->_checkType();
    $this->_checkSize();
    $this->_checkDir();
    $this->_saveFiles();
    $this->_setError(); return $this->_files;
    } //----------------------------------------------------------------------
    /**
     * Check file type.
     */
    private function _checkType()
    {
    foreach($this->_files as $fieldName=>$fileInfor)
    {
    if($fileInfor['allow_types']!='*')
    {
    $allows = explode('|', $fileInfor['allow_types']);
    $allowed = in_array($fileInfor['ext'], $allows);
    if(!$allowed)
    {
    if(!$this->_files[$fieldName]['error'])
    {
    $this->_files[$fieldName]['error'] = 'NOT_ALLOW_TYPE';
    }
    }
    }
    }
    }
      

  2.   

    //----------------------------------------------------------------------
    /**
     * Check if the size is allowed by config.
     */
    private function _checkSize()
    {
    foreach($this->_files as $fieldName=>$fileInfor)
    {
    $size =& $this->_files[$fieldName]['size'];
    $allowedSize =$this->_measurement($this->_files[$fieldName]['max_allow_size'], 'b');
    $allowSize = ($size < $allowedSize);
    if(!$allowSize)
    {
    if(!$this->_files[$fieldName]['error'])
    {
    $this->_files[$fieldName]['error'] = 'NOT_ALLOW_SIZE';
    }
    }
    }
    } //----------------------------------------------------------------------
    /**
     * Change measurement .
     */
    private function _measurement($size, $m='k')
    {
    $size = strtolower($size);
    if(is_numeric($size))
    {
    $unit = 'b';
    $size = $size;
    }
    else
    {
    $unit = substr($size, -1);
    $size = substr($size, 0, -1);
    }
    $kSize = null;
    switch($unit)
    {
    case 't':
    {
    $kSize = $size*pow(1024, 3);
    break;
    }
    case 'g':
    {
    $kSize = $size*pow(1024, 2);
    break;
    }
    case 'm':
    {
    $kSize = $size*1024;
    break;
    }
    case 'k':
    {
    $kSize = $size;
    break;
    }
    case 'b':
    {
    $kSize = ceil($size/1024);
    break;
    }
    case 'bit':
    {
    $kSize = ceil($size/(1024*8));
    break;
    }
    default:
    {
    $kSize = $size;
    }
    }
    $m = strtolower($m);
    $rtSize = null;
    switch($m)
    {
    case 't':
    {
    $rtSize = $kSize/pow(1024, 3);
    break;
    }
    case 'g':
    {
    $rtSize = $kSize/pow(1024, 2);
    break;
    }
    case 'm':
    {
    $rtSize = $kSize/1024;
    break;
    }
    case 'k':
    {
    $rtSize = $kSize;
    break;
    }
    case 'b':
    {
    $rtSize = $kSize*1024;
    break;
    }
    case 'bit':
    {
    $rtSize = $kSize*1024*8;
    break;
    }
    default:
    {
    $rtSize = false;
    }
    } return $rtSize;
    }
    //--------------------------------------------------------------------
    /**
     * Create the directory.
     */
    private function _checkDir()
    {
    foreach($this->_files as $fieldName=>$fileInfor)
    {
    $dir =& $this->_files[$fieldName]['save_path'];
    if(!$dir)
    {
    $dir = $this->_default_save_path;
    }
    else
    {
    $dir = trim($dir, '/');
    $dir = rtrim($_SERVER["DOCUMENT_ROOT"], '/').'/'.$dir;
    }
    if(!is_dir($dir) && !@mkdir($dir, 0777))
    {
    $error =& $this->_files[$fieldName]['error'];
    if(!$error)
    {
    $error = 'CREATE_DIR_ERR';
    }
    }
    }
    }
    //----------------------------------------------------------------------
    /**
     * Save files.
     */
    private function _saveFiles()
    {
    foreach($this->_files as $fieldName=>$fileInfor)
    {
    $error =& $this->_files[$fieldName]['error'];
    $tmp_file =& $this->_files[$fieldName]['tmp_name'];
    $dir =& $this->_files[$fieldName]['save_path'];
    $fileName =& $this->_files[$fieldName]['name'];
    $savePrefix =& $this->_files[$fieldName]['save_prefix'];
    if(!$savePrefix)
    {
    $savePrefix = date('Y-m-d_H:i:s');
    }
    $file = rtrim($dir, '/').'/'.$savePrefix.'_'.$fileName;
    if(file_exists($file))
    {
    $file = rtrim($dir, '/').'/'.$savePrefix.'_'.time().'_'.$fileName;
    }
    if(!$error)
    {
    if(!move_uploaded_file($tmp_file, $file))
    {
    $error = 'CREATE_FILE_ERR';
    }
    else
    {
    $this->_files[$fieldName]['file_url'] = str_replace($file, rtrim($_SERVER["DOCUMENT_ROOT"], '/'));
    }
    }
    else
    {
    @unlink($tmp_file);
    }
    }
    } //-------------------------------------------------------------------------
    /**
     * Set error string.
     */
    private function _setError()
    {
    foreach($this->_files as $fieldName=>$fileInfor)
    {
    $this->_files[$fieldName]['error_msg'] = $this->_files[$fieldName]['display_name'].$this->_files[$fieldName]['error_msgs'][$this->_files[$fieldName]['error']];
    }
    }
    }
    ?>
      

  3.   

    你的move_uploaded_file这个方法中的参数错误,move_uploaded_file第一个参数是准备移动的文件。第二个才是移动到的文件
    D:/save/www/doucafe/trunk/public/upload/2008-01-28_10:10:22_vCard.doc这个应该是你上传后的文件吧!
    你再检查一下看看是否写错了