В этой статье мы рассмотрим один из хелперов CodeIgniter который нам позволит загружать файлы с сервера на свой локальный компьютер.
Как загружать файл с компьютера на сервер можно посмотреть тут!
Данный хелпер достаточно простой в своем использовании и первое что для этого сделать требуется, - это загрузить наш хелпер.
Загружается наш хелпер в контроллере где будет использоваться основная функция для загрузки файла. Данный хелпер загружается следующим образом.
$this->load->helper('download');
У загруженного хелпера доступна следующая функция: php - Функция с аргументами force_download ('name_file', 'data'); В первый аргумент заносится имя файла, который и будет скачивается с сервера, а во второй аргумент дополнительная информация. Так же, если мы хотим скачать файл с сервера, нам придётся второй аргумент считать в строку. Для этого используется функция file_get_contents ().
$data = file_get_contents("/folder1/folder2/temp.txt"); $name_file = 'temp.txt'; force_download($name_file, $data);
Ниже будет показан полный вариант рабочей функции, которая позволяет скачать файл на свой локальный компьютер. В ней добавлена функция basename (), извлекающая имя файла из всей адресной строки. Зачем это нужно? Путь к нашему файлу на сервере мы будем получать из базы данных.
Таким образом, адрес к файлу всегда будет разный и само название файла так же будет всегда менятся, поэтому и используем функцию basename () с целью получения нового имени файла. Так же будет применена проверка, которая проверит найден файл для скачивания или нет. Если файл не найден то отобразится окно с сообщением, что файл не удалось скачать.
//функция для скачивания файла с сервера public function donwload($material_id) { //получаем из базы путь к файлу $data['info_url'] = $this->material_model->get($material_id); /*В массив $data['info_url'] присвоен путь к файлу в виде: /materials/temp/folder/test.php */ //извлекаем имя файла для скачивания из всего пути (директория + имя файла) $name_file = basename($data['info_url']); error_reporting(E_NOTICE & ~E_WARNING); $data1 = file_get_contents(".".$data['info_url']); // Считываем содержимое файла //Проверка: если не найден файл if(empty($data1)) { //редирект обратно на страницу, если запрашиваемого файла нет echo "<script>alert('Извините данный файл не удалось скачать. :('); location.href='/materials/$material_id'; </script>"; } else { $name1 = $name_file; force_download($name1, $data1); } }
Функция error_reporting (E_NOTICE & ~E_WARNING); нужна, чтобы скрыть предупреждение, которое выводит Фреймворк CodeIgniter, сообщая тем самым, что файл для скачивания не найден. Поэтому мы, с помощью функции выше, прячем от пользователей сообщение Фреймворка и выводим свое сообщение во всплывающем окне, сообщающее, что скачать файл не удалось, которое куда симпатичней, чем WARNING от CodeIgniter.
В демо версии можно просмотреть наглядный процесс успешного скачивания файла, а также пример обработки возникающих ошибок при скачивании.