В одной из предыдущих статей рассказывалось про скачивание файла с сервера на свой локальный компьютер, а теперь пришла очередь рассказать как сделать все на оборот, загрузить файл с локального компьютера на сервер. Наверняка, Вы очень много видели сайтов на которых можно загрузить на сервер, например, свою классную фотку. Для того что бы это воссоздать мы будем использовать вновь Фреймворк CodeIgniter и его библиотеку Upload.php.
И, первое что мы сделаем это форму с помощью которой мы и будем выбирать файл, а затем уже пытается загрузить его на сервер. Создается наша форма в файле с видом, например temp_demo_view, который будет, находятся в папке Views нашего Фреймворка.
В атрибут action="" можно записать путь к функции обработчика, которая проверит заданные условия. В method="post" указываем метод передачи данных. Ну и конечно нужно указать атрибут methodenctype="multipart/form-data". В теге <input /> указываем, тип нашей формы type="file".
И так, с формой вроде разобрались, теперь приступим к нашей функции которая и будет выполнять последующую загрузку файла на сайт. В созданном нами контроллере test создаем функцию для закачки файла на сервер upload().
class test extends CI_Controller { public function upload() { $CI = &get_instance(); $data = array(); //проверяем нажата ли кнопка 'dowload' в форме if(isset($_POST['download'])) { //Кнопка нажата $config['upload_path'] = './img/'; //директория, куда загружаем файл $config['allowed_types'] = 'gif|jpg|png|jpeg|txt'; //разрешенные типы файлов (можно добавить другие txt,doc и др) $config['max_size'] = '1000'; //размер файла //загружаем библиотеку Фреймворка upload $this->load->library('upload', $config); //если данная функция вернула false , то произошла ошибка и т.д //проверим, есть ли при загрузке файла на сервер ошибка, например размер большой if(! $this->upload->do_upload()) { //В массив error заносим ошибки возникшие при загрузки, используя специальную функцию $data['error']= array('error' => $this->upload->display_errors()); $errors = $data['error']['error'];//echo $errors; //загружаем основной вид и передаем туда массив с ошибками $data['upload_fhoto']= $errors; $name = 'demo/temp_demo'; //загружаем файл с видом формы, который находится в директории demo/temp_demo $CI->load->view($name.'_view',$data); } //добавляется файл на сервер else { //сообщение об успешной загрузке файла $data['upload_fhoto']= '
Файл успешно загружен!'; $name = 'demo/temp_demo'; //загружаем файл с видом формы, который находится в директории demo/temp_demo $CI->load->view($name.'_view',$data); } } //не нажата кнопка загрузки download else { //Создаем пустой массив, чтобы не возникало ошибки. $data['upload_fhoto'] = ''; $name = 'demo/temp_demo'; //загружаем файл с видом формы, который находится в директории demo/temp_demo $CI->load->view($name.'_view',$data); } } }
Можно задать и другие параметры для загружаемого файла, например:
- Overwrite: TRUE/FALSE (boolean) – по умолчанию FALSE. Если установлено TRUE - то при заливке, если файл с таким именем уже есть, то он будет перезаписан. Если FALSE – то к имени заливаемого файла добавится порядковый номер.
- Encrypt_name: TRUE/FALSE (boolean) - по умолчанию установлено FALSE. Если установленно TRUE, то имя загружаемого файла будет сгенерировано в строку случайным образом.
- Remove_spaces: TRUE/FALSE (boolean). Если установлено значение TRUE то все пробелы в имени загружаемого файла заменятся на нижнее подчеркивание. Рекомендуется всегда использовать данную опцию.
- Max_width и Max_height : Задается максимальная ширина и высота картинки в пикселах.
Нужно всегда учитывать тот факт, что если имя файла написано на кириллице, то на сервер файл загрузится уже с именем в другой кодировке и станет совсем не читабельным. Поэтому файл при загрузке уже должен иметь латинское название или менять его название уже внутри функции upload() своими методами или использовать опцию Encrypt_name: TRUE.
Вот, в принципе, и все, остается Вам нажать на кнопку обзор выбрать файл для загрузки на сервер и нажать на кнопочку загрузить, после чего Вами выбранный файл появится в папке, которую вы указали как директорию для загрузки $config['upload_path'] = './img/';, в данном случае в папке img .
Пример загрузки файла на сервер показан в демо-версии.