alt

Когда человеку тяжело,
это часто означает,
что он идёт к успеху.

alt


Скачать файл с сайта на CodeIgniter

Категория: Скрипты php Просмотров: 3731 Коментариев: 0 Дата: 2017-01-16 Добавил: admin

 Скачать файл с сайта на CodeIgniter

В этой статье мы рассмотрим один из хелперов CodeIgniter который нам позволит загружать файлы с сервера на свой локальный компьютер.

Как загружать файл с компьютера на сервер можно посмотреть тут!

Данный хелпер достаточно простой в своем использовании и первое что для этого сделать требуется, - это загрузить наш хелпер.

Загружается наш хелпер в контроллере где будет использоваться основная функция для загрузки файла. Данный хелпер загружается следующим образом.

PHP
$this->load->helper('download');

У загруженного хелпера доступна следующая функция: php - Функция с аргументами force_download ('name_file', 'data'); В первый аргумент заносится имя файла, который и будет скачивается с сервера, а во второй аргумент дополнительная информация. Так же, если мы хотим скачать файл с сервера, нам придётся второй аргумент считать в строку. Для этого используется функция file_get_contents ().

PHP
$data = file_get_contents("/folder1/folder2/temp.txt");
$name_file = 'temp.txt';
force_download($name_file, $data);

Ниже будет показан полный вариант рабочей функции, которая позволяет скачать файл на свой локальный компьютер. В ней добавлена функция basename (), извлекающая имя файла из всей адресной строки. Зачем это нужно? Путь к нашему файлу на сервере мы будем получать из базы данных.

Таким образом, адрес к файлу всегда будет разный и само название файла так же будет всегда менятся, поэтому и используем функцию basename () с целью получения нового имени файла. Так же будет применена проверка, которая проверит найден файл для скачивания или нет. Если файл не найден то отобразится окно с сообщением, что файл не удалось скачать.

PHP
//функция для скачивания файла с сервера
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.

В демо версии можно просмотреть наглядный процесс успешного скачивания файла, а также пример обработки возникающих ошибок при скачивании.


Просмотреть демо: Демо

Скачать исходник: Скачать



Добавить комментарий:


Ваше имя

Текст комментария


Введите буквы с учетом регистра:





Апдейты

Популярное Свежие записи

Облако тегов