С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
1

Отдача файла не по прямой ссылке

09.01.2017, 09:37. Показов 2873. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Необходимо отдать файл не по прямой ссылке. Алгоритм, который хочу получить:
1. Пользователь идет по ссылке вида http://example.com/list/export/55 (где 55 - переменная, иначе гет параметр).
2. Контроллер по указанной ссылке генерирует xls файл при помощи библиотеки PHPExcel. Файл сохраняется на сервере (как временный).
3. Никакой переадресации. Все происходит в текущем контроллере, url не меняется. Пользователю отдается сгенерированный xls файл (он видит диалог запроса на скачивание и скачивает его).
4. Файл удаляется с сервера, чтобы не засорять дисковое пространство.

Пункты 1 и 2 готовы. С пунктом 4 тоже проблем не возникнет. Загвоздка с пунктом 3 - отдача фйала не по прямой ссылке.
Как такое можно реализовать?

Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2017, 09:37
Ответы с готовыми решениями:

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

403 forbidden для файла по прямой ссылке
Очень прошу помочь советом знатоков ;) По прямой ссылке на любой файл (не картинка) появляется...

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

Как узнать размер файла на сервере по прямой http ссылке
В программе должен загружаться 1 компонент, его размер не фиксирован и может меняться по мере...

11
Заблокирован
09.01.2017, 12:07 2
Возникает вопрос: нафига тогда вообще сохранять? Отдали по запросу содержимое файла и забыли. К ссылке в таком случае лучше добавить соотв. расширение, чтобы нек. браузеры меньше тупили.
1
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
09.01.2017, 12:07 3
как-то так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$StoreFile='путь к файлу';
         header('HTTP/1.1 200 OK');
         header('Cache-Control: maxage=3600');
         header('Pragma: private');
         header('Content-Type: application/octet-stream');
         header('Last-Modified: '.gmdate('r',filemtime($StoreFile)));
         header('ETag: '.sprintf('%x-%x-%x',fileinode($StoreFile),filesize($StoreFile),filemtime($StoreFile)));
         header('Content-Length: '.(filesize($StoreFile)));
         header('Connection: close');
         header('Content-Disposition: attachment; filename.xls');
         $f=fopen($StoreFile,'r');
         while(!feof($f)) { echo fread($f,4096);  }
         fclose($f);
1
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
09.01.2017, 12:39 4
Цитата Сообщение от svs171 Посмотреть сообщение
PHP
1
2
3
$f=fopen($StoreFile,'r');
while(!feof($f)) { echo fread($f,4096); }
fclose($f);
readfile(), не?
1
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
09.01.2017, 12:48 5
Kerry_Jr, разве есть задачи с единственно правильным решением? Я просто вставил работающий кусок кода, написанный черти когда.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.01.2017, 13:06 6
Цитата Сообщение от svs171 Посмотреть сообщение
разве есть задачи с единственно правильным решением? Я просто вставил работающий кусок кода, написанный черти когда.
Но 1 вызов функции лучше и красивее и быстрее чем многократный вызов в цикле.
0
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
09.01.2017, 16:51  [ТС] 7
Всем спасибо, получилось!
svs171, спасибо за заголовки, знал что все дело в них, но не знал какие именно отправлять.
Kerry_Jr, спасибо за readfile()
miketomlin, спасибо за подсказку добавить расширение к url. А то браузеры тупили... Предлагали сохранить файл под именем, например, 55 Где 55 - тот самый гет параметр.

Цитата Сообщение от miketomlin Посмотреть сообщение
Возникает вопрос: нафига тогда вообще сохранять? Отдали по запросу содержимое файла и забыли.
Я бы с радостью, но пока не знаю как это сделать при помощи PHPExcel. В коде это объект книги, пары листов и т.д. и т.п. Как его вывести в виде готового xlsx файла я пока не знаю. Как?
0
Заблокирован
09.01.2017, 17:46 8
Обратитесь к документации. Я точно знаю, что PHPExcel может «сохранять» прямо в буфер вывода.
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.01.2017, 17:53 9
PHP
1
2
3
4
5
$excel = new \PHPExcel();
// ...
$writer = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
header('Тут прописать нужные заголовки');
$writer->save('php://output');
1
119 / 116 / 63
Регистрация: 16.09.2016
Сообщений: 354
09.01.2017, 19:57 10
Цитата Сообщение от Зверушь Посмотреть сообщение
при помощи PHPExcel
как вариант, неплохое практическое описание, хоть и старое
Цитата Сообщение от Jewbacabra Посмотреть сообщение
header('Тут прописать нужные заголовки');
для xlsx достаточно:
PHP
1
2
3
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="file_name.xlsx"');
            header('Cache-Control: max-age=0');
1
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
10.01.2017, 12:23  [ТС] 11
Да, вот как раз и почитал про сохранение:
PHP
1
$writer->save('php://output');
Однако, в самой же документации написано, что это не безопасно...
0
svs171
10.01.2017, 13:06     Отдача файла не по прямой ссылке
  #12

Не по теме:

Цитата Сообщение от Зверушь Посмотреть сообщение
это не безопасно...
так жить тоже опасно, от этого умирают :)

0
10.01.2017, 13:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2017, 13:06
Помогаю со студенческими работами здесь

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

Отдача файла во flash плеер
Здравствуйте! Подскажите кто может разобраться с одной проблемой. В общем, перерабатываю...

Отдача файла с удаленного сервера с нужным именем
Файл торрент отдаётся в виде url http://z.z/download/123123 в ответ файл site.ru-namefilm.torrent ...

Отдача временного файла на скачивание, исправить код
Здравствуйте! Скажите пожалуйста что нетак $fp=tmpfile(); $tt=fwrite($fp,$content);...

подскажите - что не так ,отдача обрезаного файла
Здравствуйте! подскажите - что не так ,отдача обрезаного файла, вот Аяксом выводит обработаную...

Сохранение картинки по прямой ссылке
Доброго времени суток! Столкнулся с такой проблемой. Есть список прямых ссылок на картинки....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru