如何修改此内容以上传多个文件?

时间:2013-11-30 06:09:27

标签: php arrays post file-upload upload

我的上传代码是这样的。我用postdata将图像提交给它。我想让文件选择框接受多个picute,并让它在后端工作。我可以让标题位置在我自己的工作正常,但使用一组文件已经证明是困难的,即使我花了几个小时在堆栈溢出和谷歌。如果有人能告诉我怎么做,我会喜欢它。     

if($_SERVER['REQUEST_METHOD'] == 'POST') {

    $browse = $_POST["browse"];

    preg_match('/\.([a-zA-Z]+?)$/', $_FILES['userfile']['name'], $matches);

    if(in_array(strtolower($matches[1]), $accepted)) {

        if($_FILES['userfile']['size'] <= $maxsize) {

            $newname = md5_file($_FILES['userfile']['tmp_name']).'.'.$matches[1];

            $browse = $_POST["browse"];

        if ($browse == "1") {
            $filedir = 'img';
            } else if ($browse == "2") {
            $filedir = 'zega';
            } else if ($browse == "3") {
            $filedir = 'noimg';
            } else if ($browse == "4") {
            $filedir = 'adult';
            } else if ($browse == "5") {
            $filedir = 'temp';
            } else {
            $filedir = 'noimg';
        }

            move_uploaded_file($_FILES['userfile']['tmp_name'],     $filedir.'/'.$newname);

            $path =  $filedir.'/'.$newname;

            if (strpos($path,'jpg') !== false){
            $img = imagecreatefromjpeg ($path);
            imagejpeg ($img, $path, 100);
            imagedestroy ($img);
            } else if (strpos($path,'gif') !== false){
            $img = imagecreatefromgif ($path);
            imagegif ($img, $path, 100);
            imagedestroy ($img);
            } else if (strpos($path,'bmp') !== false){
            $img = imagecreatefrombmp ($path);
            imagebmp ($img, $path, 100);
            imagedestroy ($img);
            } 

            header("Location: index.php?p=uploaded&img=$newname");
        } else 
            header("Location: index.php?p=error&num=2");
     } else
    header("Location: index.php?p=error&num=1");
 }
?>

2 个答案:

答案 0 :(得分:1)

foreach($_FILES as $key_file=>$file_info){
    //your code here instead $_FILES['userfile']['tmp_name'] use $file_info['tmp_name']
}

答案 1 :(得分:1)

我曾经写过一个上传课程。 这个类能够同时上传多个文件(例如图片.etc)。

它还具有其他能力,例如: - 如果您上传多个具有相同名称的文件,它将自动更改其名称 - 您可以添加允许的类型 -set上传文件的最大大小 ...

类上传{

protected $_uploaded = array();
protected $_destination_upload_folder;
//Constraint
protected $_max_upload_size = 512000;    
protected $_permitted_files = array('image/gif', 'image/png', 'image/jpg', 'image/jpeg', 'image/pjpeg');

protected $_error_messages = array();
protected $_renamed_file = false;

public function __construct($input_upload_path) {
    if(!is_dir($input_upload_path) || !is_writable($input_upload_path)){
        throw new Exception("$input_upload_path must be a valid,writable path!");
    }

    $this->_destination_upload_folder = $input_upload_path;
    $this->_uploaded = $_FILES;
}

protected function checkError($fileName, $error){
    switch ($error) {
        case 0:
            return true;
        case 1:
        case 2:
            $this->_error_messages[] = "$fileName exceeds maximum file size : "
                                       .$this->getMaxSize();
            return true;
        case 3:
            $this->_error_messages[] = "Error while uploading $fileName.please try again.";
            return false;
        case 4:
            $this->_error_messages[] = "No file selected.";
            return false;            
        default:
            $this->_error_messages[] = "System Error uploading $fileName.Please contact administrator.";
            return false;
        return false;
    }
}

protected function checkSize($fileName, $size){
    if($size == 0){
        return false;
    }else if($size > $this->_max_upload_size){
        $this->_error_messages[] = "$fileName exceeds maximum size : ".
                                    $this->_max_upload_size;
        return false;
    }else{
        return true;
    }
}

protected function checkType($fileName, $type){
    if(!in_array($type, $this->_permitted_files)){
        $this->_error_messages[] = 'This type of file is not allowed for uploading '
                                   .'.please upload permitted files.';
        return false;
    }else{
        return true;
    }
}

public function checkName($input_file_name, $overwrite)
{        
    $input_file_name_without_spaces = str_replace(' ', '_', $input_file_name);
    if($input_file_name_without_spaces != $input_file_name){
        $this->_renamed_file = true;
    }

    if(!$overwrite){
        $all_files_in_upload_directory = scandir($this->_destination_upload_folder);
        if(in_array($input_file_name_without_spaces, $all_files_in_upload_directory)){
            $dot_position = strrpos($input_file_name_without_spaces, '.');
            if($dot_position){
                $base = substr($input_file_name_without_spaces, 0, $dot_position);                    
                $extension = substr($input_file_name_without_spaces, $dot_position);
            }else{
                $base = substr($input_file_name_without_spaces);
                $extension = '';
            }
            $i = 1;
            do{
                $input_file_name_without_spaces = $base.'_'.$i++.$extension;
            }while(in_array($input_file_name_without_spaces, $all_files_in_upload_directory));
            $this->_renamed_file = true;
        }
    }        
    return $input_file_name_without_spaces;
}

protected function getMaxSize(){
    return number_format(($this->_max_upload_size)/1024, 1).'kb';
}

protected function isValidMime($types)
{
    $also_valid_mimes = array('application/pdf', 'text/plain', 'text/rtf');
    $all_valid_mimes = array_merge($this->_permitted_files, $also_valid_mimes);

    foreach($types as $type){
        if(!in_array($type, $all_valid_mimes)){
            throw new Exception("$type is not a valid permitted mime type!");
        }
    }
}

public function addPermittedType($input_type_name)
{
    $input_type_name_array = (array)$input_type_name;
    $this->isValidMime($input_type_name_array); 
    $this->_permitted_files = array_merge($this->_permitted_files, $input_type_name_array);
}

protected function processFile($fileName, $error, $size, $type, $tmp_name, $overwrite)
{
    $check_upload_error = $this->checkError($fileName, $error);
    if($check_upload_error){
        $check_uploaded_file_type = $this->checkType($fileName, $type);
        $check_uploaded_file_size = $this->checkSize($fileName, $size);

        if($check_uploaded_file_type && $check_uploaded_file_size){
            $new_uploaded_file_name = $this->checkName($fileName, $overwrite);
            $upload_result = move_uploaded_file($tmp_name, $this->_destination_upload_folder.$new_uploaded_file_name);
            if($upload_result){
                $messages = $new_uploaded_file_name.' uploaded successfully! <br >';
                if($this->_renamed_file){
                    $messages .= ' and renamed successfully!';
                }
                $this->_error_messages[] = $messages;
            } else {
                $this->_error_messages[] = 'Could`nt upload '.$fileName;
            }
        }
    }        
}


public function move($overwrite = FALSE){
    $file = current($this->_uploaded);
    if(is_array($file['name'])){
        foreach($file['name'] as $index => $filename){
            $this->_renamed_file = false;
            $this->processFile($filename, $file['error'][$index],
                    $file['size'][$index], $file['type'][$index], $file['tmp_name'][$index], $overwrite);
        }
    }else{
        $this->processFile($file['filename'], $file['error'], $file['size'], $file['type']
                , $file['tmp_name'], $overwrite);
    }               
}

public function getErrorMessages(){
    return $this->_error_messages;
}

public function setMaxSize($new_upload_size)
{
    if(!is_numeric($new_upload_size) || $new_upload_size <= 0){
        throw new Exception("new maximum upload size must a number!");
    }
    $this->_max_upload_size = (int)$new_upload_size;
}   

}

$max_upload_size = 1024 * 1024;

if(isset($_POST['upload_button'])){
    $destination_upload_folder = 'destination of upload folder here....';
    require_once 'Upload class filename...';
    try{
        $upload = new Upload($destination_upload_folder);
        $upload->setMaxSize($max_upload_size);
        $upload->addPermittedType('application/pdf');
        $upload->move(true);
        $result = $upload->getErrorMessages();
    }catch(Exception $e){
        echo $e->getMessage();
    }
}