Класс загрузки файла CodeIgniter, ошибка с do_upload

Я хочу запрограммировать функцию для загрузки файлов excel в базу данных sql. У меня проблема, потому что $this->upload->do_upload('file') не выполняется, и я не могу понять, почему.

Вот мой контроллер:

function import(){
    $this->breadcrumbs[] = array(
           "title" => "Import",
           "link" => "interview/import"
       );
    $this->template->load("interview_import", $this->breadcrumbs, $data);
}

function import_data() {         
    $this->load->library("form_validation");        
    $config = array(
        'upload_path' => FCPATH. 'upload/',
        'allowed_types' => 'xls'
        );
    $this->load->library('upload', $config);
    if($this->upload->do_upload('file')) {
        $data = $this->upload->data();
        @chmod($data['full_path'], 0777);
    }
    $this->load->library("Spreadsheet_Excel_Reader");
    $this->spreadsheet_excel_reader->setOutputEncoding('CP1251');

    $this->spreadsheet_excel_reader->read($data['full_path']);
    $sheets = $this->spreadsheet_excel_reader->sheets[0];
    error_reporting(E_ALL ^ E_NOTICE);

    $data_excel = array();
    for ($i = 2; $i <= $sheets[0]['numRows']; $i++) {
        if ($sheets['cells'][$i][1] == '') {
            break;
        }
        $data_excel[$i -1]['name'] = $sheets['cells'][$i][1];
        $data_excel[$i -1]['phone'] = $sheets['cells'][$i][2];
        $data_excel[$i -1]['address'] = $sheets['cells'][$i][3];

        /*for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
            echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
        }
    echo "\n";*/
    }
    echo '<pre>';
    print_r($data_excel);
    echo '</pre>';
    die();       
}

И это мой взгляд:

<?php    
      echo form_open_multipart('interview/import_data');
      echo form_upload('file');
      echo '<br/>';
      echo form_submit(null, 'Upload');
      echo form_close();
?>

Вы хоть понимаете, что я делаю неправильно?

При попытке загрузить получаю сообщение об ошибке:

> Произошла ошибка PHP Серьезность: Уведомление Сообщение: Неопределенная переменная: data Имя файла: controllers/Interview.php Номер строки: 521 Backtrace: Файл: C:\Users\A66155193\Desktop\xampp\htdocs\yitt\application\ controllers\Interview.php Строка: 521 Функция: _error_handler Файл: C:\Users\A66155193\Desktop\xampp\htdocs\yitt\index.php Строка: 311 Функция: require_once

Таким образом, очевидно, что if-clause может выполняться, потому что:

Неопределенная переменная: данные

Спасибо за помощь!


person Jannik Window    schedule 17.08.2017    source источник


Ответы (1)


После того, как условие do_upload проверьте, что если файл не загружается, чем ошибка

if($this->upload->do_upload('file')) {
    $data = $this->upload->data();
    @chmod($data['full_path'], 0777);
} else{
    $error = array('error' => $this->upload->display_errors());
    print_r($error);
}

Вы должны проверить это, потому что переменная $data инициализируется в операторе if, а внизу говорится, что переменная не определена.

person Moiz Arif    schedule 17.08.2017
comment
Путь загрузки недействителен. а также Имя файла не читается. но как я могу напечатать имя фильма, чтобы увидеть, что не так - person Jannik Window; 17.08.2017
comment
Ваш путь загрузки находится в корне? - person Moiz Arif; 17.08.2017
comment
Если он находится в корне, вы можете использовать свой путь загрузки, например «upload_path» => «./upload/», - person Moiz Arif; 17.08.2017
comment
что ты имеешь в виду? - person Jannik Window; 17.08.2017
comment
ничего не меняй - person Jannik Window; 17.08.2017
comment
stackoverflow.com/questions/15050322/ Проверьте это - person Moiz Arif; 17.08.2017
comment
@JannikWindow с удовольствием ???????? - person Moiz Arif; 17.08.2017