当回显多个文件数据时,它只显示最后的文件信息

时间:2016-02-16 10:26:50

标签: codeigniter

在我的多个上传库中,我有一个称为上传数据的功能。

另一个叫上传的功能。

由于某些原因,当我选择多个图像并且在我的控制器上使用时成功已满

$data = $this->multiple_upload->upload_data();

echo $data['file_name'];

它只会获取所选的最后一个文件的名称,它不会返回所有选定的文件名。它应显示所有选定的文件名。

问题:我的库function upload_data()如何确保可以正确返回数据,而不仅仅是最后一个。 upload_data函数似乎只返回最后一个文件信息。

<?php

class Multiple_upload {

    public function __construct($config = array()) {

        $this->CI =& get_instance();

        $this->files = $this->clean($_FILES);

        empty($config) OR $this->set_config($config);

    }

    public function set_config($config) {
        foreach ($config as $key => $value) {
            $this->$key = $value;
        }

        return $this;
    }

    public function upload($field = 'userfile') {
        if (empty($this->upload_path)) {
            $this->set_error('upload_path_not_set');
            return FALSE;
        } 

        if (!realpath(FCPATH . $this->upload_path)) {
            $this->set_error('upload_path_in_correct');
            return FALSE;
        } 

        if (!empty($this->files[$field]['name'][0])) {

            $check_error = 0;

            foreach ($this->files[$field]['name'] as $key => $value) {

                $this->file_name = $this->files[$field]['name'][$key];
                $this->file_temp = $this->files[$field]['tmp_name'][$key];
                $this->file_size = $this->files[$field]['size'][$key];
                $this->get_file_extension = explode('.', $this->files[$field]['name'][$key]);
                $this->get_file_extension_end = strtolower(end($this->get_file_extension));

                if (!in_array($this->get_file_extension_end, $this->allowed_types)) {

                    $this->set_error('file_extension_not_allowed');

                    $check_error++;
                } 

                if ($this->files[$field]['size'][$key] > $this->max_size) {

                    $this->set_error('file_size_check');

                    $check_error++;
                }

                if ( ! @copy($this->file_temp, FCPATH . $this->upload_path . '/' . $this->file_name)) {

                    if ( ! @move_uploaded_file($this->file_temp, FCPATH . $this->upload_path . '/' . $this->file_name)) {

                        $this->set_error('upload_destination_error', 'error');

                        $check_error++;
                    }

                }

            }

            if($check_error > 0 ) {
                return FALSE;
            }

            // This lets me get file data in another function
            return $this;

        }
    }

    public function upload_data() {

        $data = array(
            'file_name' => $this->file_name,
            'file_path' => FCPATH . $this->upload_path . '/'
        );

        return $data;
    }

    public function set_error($message) {

        $this->CI->lang->load('upload', 'english');

        $msg = "";

        if ($message == 'upload_path_not_set') {

            $msg .= $this->CI->lang->line($message);
        }

        if ($message == 'upload_path_in_correct') {

            $msg .= $this->CI->lang->line($message);
        }

        if ($message == 'file_extension_not_allowed') {

            $msg .= sprintf($this->CI->lang->line($message), $this->file_name, $this->get_file_extension_end);

        }

        if ($message == 'file_size_check') {

            $msg .= sprintf($this->CI->lang->line($message), $this->file_name, $this->max_size);

        }

        return $this->error_message[] = $msg;
    }

    public function display_error_messages($open_tag = '<p>', $close_tag = '</p>') {

        $message = "";

        if (isset($this->error_message)) {

            foreach($this->error_message as $msg) {
                $message .= $open_tag . $msg . $close_tag;
            }


        }

        return $message;

    }

    public function clean($data) {
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                unset($data[$key]);

                $data[$this->clean($key)] = $this->clean($value);
            }
        } else {
            $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
        }

        return $data;
    }
}

我试过了

public function upload_data() {

    $data[] = array(
        'file_name' => $this->file_name,
        'file_path' => FCPATH . $this->upload_path . '/'
    );

    return $data;
}

控制器索引功能

public function index(){

    $data['error'] = '';

    $this->load->library('multiple_upload');

    $config['upload_path'] = 'uploads';
    $config['allowed_types'] = array('jpg', 'png');
    $config['max_size'] = 3000000;
    //$config['max_size'] = 1000;
    $config['overwrite'] = TRUE;

    $this->multiple_upload->set_config($config);

    if ($this->multiple_upload->upload() == FALSE) {

        $data['error'] = $this->multiple_upload->display_error_messages('<div class="alert alert-danger">', '</div>');

        $this->load->view('upload', $data);

    } else {

        $data = $this->multiple_upload->upload_data();

        echo $data['file_name'];
    }

}

2 个答案:

答案 0 :(得分:1)

<?php

class Multiple_upload {
    private $filenames;
    public function __construct($config = array()) {

        $this->CI =& get_instance();

        $this->files = $this->clean($_FILES);
        $this->filenames = array();
        empty($config) OR $this->set_config($config);

    }

    public function set_config($config) {
        foreach ($config as $key => $value) {
            $this->$key = $value;
        }

        return $this;
    }

    public function upload($field = 'userfile') {
        if (empty($this->upload_path)) {
            $this->set_error('upload_path_not_set');
            return FALSE;
        } 

        if (!realpath(FCPATH . $this->upload_path)) {
            $this->set_error('upload_path_in_correct');
            return FALSE;
        } 

        if (!empty($this->files[$field]['name'][0])) {

            $check_error = 0;

            foreach ($this->files[$field]['name'] as $key => $value) {

                $this->file_name = $this->files[$field]['name'][$key];
                $this->filenames[]   = $this->files[$field]['name'][$key];
                $this->file_temp = $this->files[$field]['tmp_name'][$key];
                $this->file_size = $this->files[$field]['size'][$key];
                $this->get_file_extension = explode('.', $this->files[$field]['name'][$key]);
                $this->get_file_extension_end = strtolower(end($this->get_file_extension));

                if (!in_array($this->get_file_extension_end, $this->allowed_types)) {

                    $this->set_error('file_extension_not_allowed');

                    $check_error++;
                } 

                if ($this->files[$field]['size'][$key] > $this->max_size) {

                    $this->set_error('file_size_check');

                    $check_error++;
                }

                if ( ! @copy($this->file_temp, FCPATH . $this->upload_path . '/' . $this->file_name)) {

                    if ( ! @move_uploaded_file($this->file_temp, FCPATH . $this->upload_path . '/' . $this->file_name)) {

                        $this->set_error('upload_destination_error', 'error');

                        $check_error++;
                    }

                }

            }

            if($check_error > 0 ) {
                return FALSE;
            }

            // This lets me get file data in another function
            return $this;

        }
    }

    public function upload_data() 
    {
        $data = array();
        foreach($this->filenames as $filename)
        {
            $data[] = array(
                'file_name' => $filename,
                'file_path' => FCPATH . $this->upload_path . '/'
            );
        }
        return $data;
    }

    public function set_error($message) {

        $this->CI->lang->load('upload', 'english');

        $msg = "";

        if ($message == 'upload_path_not_set') {

            $msg .= $this->CI->lang->line($message);
        }

        if ($message == 'upload_path_in_correct') {

            $msg .= $this->CI->lang->line($message);
        }

        if ($message == 'file_extension_not_allowed') {

            $msg .= sprintf($this->CI->lang->line($message), $this->file_name, $this->get_file_extension_end);

        }

        if ($message == 'file_size_check') {

            $msg .= sprintf($this->CI->lang->line($message), $this->file_name, $this->max_size);

        }

        return $this->error_message[] = $msg;
    }

    public function display_error_messages($open_tag = '<p>', $close_tag = '</p>') {

        $message = "";

        if (isset($this->error_message)) {

            foreach($this->error_message as $msg) {
                $message .= $open_tag . $msg . $close_tag;
            }


        }

        return $message;

    }

    public function clean($data) {
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                unset($data[$key]);

                $data[$this->clean($key)] = $this->clean($value);
            }
        } else {
            $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
        }

        return $data;
    }
}

并且

public function index()
{

    $data['error'] = '';
    $this->load->library('multiple_upload');
    $config['upload_path'] = 'uploads';
    $config['allowed_types'] = array('jpg', 'png');
    $config['max_size'] = 3000000;
    //$config['max_size'] = 1000;
    $config['overwrite'] = TRUE;

    $this->multiple_upload->set_config($config);
    if ($this->multiple_upload->upload() == FALSE) 
    {
        $data['error'] = $this->multiple_upload->display_error_messages('<div class="alert alert-danger">', '</div>');
        $this->load->view('upload', $data);
    } 
    else 
    {
        $data = $this->multiple_upload->upload_data();
        foreach($data as $file)
        {
            echo $file['file_name']."<br>";
        }
    }
}

答案 1 :(得分:0)

您可以使用数组在upload_data函数中保存所有文件信息。

public function upload_data() {

        $data = array(
            'file_name' => $this->file_name,
            'file_path' => FCPATH . $this->upload_path . '/'
        );

        return $data;
    }

public function upload_data() {

        $data[] = array(
            'file_name' => $this->file_name,
            'file_path' => FCPATH . $this->upload_path . '/'
        );

        return $data;
    }

它将返回所有文件详细信息的数组