2013-11-23 3 views
0

У меня есть следующая ситуация: Мне нужно загрузить 3 файла сразу, когда пользователь нажимает на это. Там код, который я есть, на мой взгляд:Хранить загруженные данные файла в массив

<?php echo form_open_multipart('uploads/do_upload', 'class="dropzone", id="dropzone-prod", data-nextFormExecDropzone="#dropzone-promo"');?> 
    <div class="fallback"> 
    <input type="file" name="userfile" size="20" /> 
    </div> 
</form> 
<?php echo form_open_multipart('uploads/do_upload', 'class="dropzone", id="dropzone-promo", data-nextFormExecDropzone="#dropzone-plan"');?> 
    <div class="fallback"> 
    <input type="file" name="userfile" size="20" /> 
    </div> 
</form> 
<?php echo form_open_multipart('uploads/do_upload', 'class="dropzone", id="dropzone-plan"');?> 
    <div class="fallback"> 
    <input type="file" name="userfile" size="20" /> 
    </div> 
</form> 
<div class="col-lg-4"> 
    <button id="processQueue" class="btn btn-primary" type="button"><i class="fa fa-upload"></i>Start Upload</button> 
</div> 

Когда пользователь нажимает на кнопку, у меня есть яваскрипта код, который посылает каждой формы заказа я хочу его. В моем контроллере, у меня есть следующий метод (do_upload()):

function do_upload() { 
    //$filePath = $this->config->item('base_current_upload_url'); 
    $filePath = APPPATH.'UPLOADS/'; 
    $filePathAfterUploaded = $this->config->item('base_uploaded_url'); 

    $config['upload_path'] = $filePath; 
    $config['allowed_types'] = '*'; 
    $config['max_size'] = 1024 * 100; 

    $this->load->library('upload', $config); 

    //$this->load->library('csvreader'); 
    //$filePathAfterUploaded = $this->config->item('base_uploaded_url'); 
    //print_r($filePath); die(); 
    $basefilepath = APPPATH.'UPLOADS/'; 
    $this->load->model('uploads_m'); 

    if (! $this->upload->do_upload('file')) { 
     $error = array('error' => $this->upload->display_errors()); 

     print_r($error); 
    } 
    else { 
     $data = array('upload_data' => $this->upload->data()); 
     print_r($data); die(); 
    } 

}

ПРОБЛЕМА:

мне нужно 3 файлов, которые будут загружены. Если только один отсутствует, я не могу продолжить. Таким образом, я делаю, функция do_upload вызывается во время загрузки каждого файла, поэтому мне нужно найти способ идентифицировать, что эти 3 файла были загружены. (После этого я буду использовать mysql 'load data infile' для загрузки данных из этих файлов в некоторые таблицы, но я могу сделать это только в том случае, если они были загружены. Можете ли вы помочь мне найти способ справиться с этой ситуацией?

структура $ EVERYTIME данных do_uplaod называется это:.

Array 
(
[upload_data] => Array 
    (
     [file_name] => PROMOWEB111120131.txt 
     [file_type] => text/plain 
     [file_path] => C:/Program Files/EasyPHP-DevServer-13.1VC9/data/localweb/projects/integration/www/application/UPLOADS/ 
     [full_path] => C:/Program Files/EasyPHP-DevServer-13.1VC9/data/localweb/projects/integration/www/application/UPLOADS/PROMOWEB111120131.txt 
     [raw_name] => PROMOWEB111120131 
     [orig_name] => PROMOWEB11112013.txt 
     [client_name] => PROMOWEB11112013.txt 
     [file_ext] => .txt 
     [file_size] => 2.67 
     [is_image] => 
     [image_width] => 
     [image_height] => 
     [image_type] => 
     [image_size_str] => 
    ) 

) 

ответ

1

Если do_upload является автономной функцией, то ввести статическую переменную, которая подсчитывает количество вызовов

function do_upload() { 
    static $count = 0; 
    // The rest of your function goes here 
    if (no_errors_occurred) { 
     static::$count++; 
    } 
    if ($count == 3) { 
     // This function has been called 3 times; trigger something here 
    } 
} 

Лучше однако, если это в классе ...

class MyClass { 
    protected static $data = array(); 

    // Other functions and properties 

    public function do_upload() { 
     // The rest of your function 
     if (no_errors_occurred) { 
      static::$data[] = array (
       'upload_data' => array (
        'file_name' => ..., 
        // Populate the data array 
       ) 
      ); 
     } 
     $this->do_mysql_load_data_infile(); 
    } 

    protected function do_mysql_load_data_infile() { 
     if (count(static::$data) != 3) { 
      return false; 
     } 
     // Do MySQL load data infile 
     // Get information about file uploads by accessing the static::$data array 
     foreach (static::$data as $file) { 
      echo $file['upload_data']['file_name']; 
     } 
    } 
} 
+0

но как бы определить имя файла в этом файле do_mysql_load_data_infile? – Periback

+0

См. Мой пример класса выше. Вместо того, чтобы просто хранить счетчик, храните данные в массиве и проверяйте длину массива. –

+0

Спасибо M Миллер! : D – Periback

Смежные вопросы