Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: По нажатию на кнопку: создать файл и выдать его для скачивания

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
razorg1991
Отправлено: 05 Ноября, 2014 - 08:51:28
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Есть папки с картинками. Есть страница с названиями папок (в каждой хранятся картинки) и напротив каждой папки кнопка скачать.

Что хочу реализовать:
1. По нажатию кнопки скачать (будет обычная ссылка + GET к примеру с наименованием папки) выполняется редирект на эту же страницу со списком файлов (ну или даже не редирект, а просто вывод того же самого вида страницы)
2. После редиректа (или точнее во время его) выолняется создание архива выбранной папки с картинками.
3. Выдача пользователю для скачивания этого же самого архива.

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

(Отредактировано автором: 05 Ноября, 2014 - 08:52:11)

 
 Top
Ch_chov
Отправлено: 05 Ноября, 2014 - 09:02:37
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Делаете редирект на файл. Если сервер отдаёт правильные заголовки, то окошко само появится.
 
 Top
razorg1991
Отправлено: 05 Ноября, 2014 - 22:42:28
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Ch_chov пишет:
Делаете редирект на файл.


Не совсем получается, вернее совсем не получается Огорчение

Делаю следующее

PHP:
скопировать код в буфер обмена
  1.  
  2. elseif($_SERVER["REQUEST_METHOD"]=="GET" && isset($_GET['zip'])) :
  3.         $namezip = $_GET['zip'];
  4.         ProcessingImages::createZipArchive($namezip);
  5.         $namezip = str_replace('~', '_', $namezip);
  6.        
  7.         header('Content-Type: application/octet-stream');
  8.         header('Content-Disposition: attachment; filename="'.PATH_DATABASE.'zip/'.$namezip.'.zip"');
  9.         header('Content-Transfer-Encoding: binary');
  10.  


Далее следует html вида при условии elseif

Создаю zip

PHP:
скопировать код в буфер обмена
  1.  
  2. static function createZipArchive($getname) {
  3.        
  4.             $name = explode('_', $getname);
  5.             $type_name = array_pop($name);
  6.             if($type_name !== 'text' && $type_name !== 'image') {
  7.                 $img_folder = 'images_original/';
  8.             }
  9.             else {
  10.                 $img_folder = 'images_with_watermark/';
  11.             }
  12.            
  13.             $namezip = str_replace('~', '_', $getname);
  14.             $zip = new ZipArchive;
  15.             $zip->open(PATH_DATABASE.'zip/'.$namezip.'.zip', ZipArchive::CREATE);
  16.            
  17.                 $img_dir = scandir(PATH_DATABASE.$img_folder.$getname.'/');
  18.                 foreach($img_dir as $image) {
  19.                     if(!is_dir($image)) {
  20.                         $zip->addFile(PATH_DATABASE.$img_folder.$getname.'/'.$image, $image);
  21.                     }
  22.                 }
  23.            
  24.             $zip->close();
  25.            
  26.        }
  27.  


Все работает, НО выдает ошибку

Warning: Cannot modify header information - headers already sent by (output started at W:\home\localhost\www\autocsv\core_classes\BaseClass.php:13) in W:\home\localhost\www\autocsv\pages\processingimages.php on line 127

И даже понятно почему: у меня заголовки уже переданы. Собственно с чего тему начинал, к тому и пришел Огорчение Прошу помощи
 
 Top
kotyara1979
Отправлено: 05 Ноября, 2014 - 23:47:30
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




razorg1991 пишет:
Warning: Cannot modify header information - headers already sent by (output started at W:\home\localhost\www\autocsv\core_classes\BaseClass.php:13) in W:\home\localhost\www\autocsv\pages\processingimages.php on line 127


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

Грубо говоря, после echo ""; попытка передать заголовок вызовет ошибку.

(Отредактировано автором: 05 Ноября, 2014 - 23:48:08)



-----
Сделать можно все. Главное одеть каску.
 
 Top
razorg1991
Отправлено: 06 Ноября, 2014 - 07:48:02
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




kotyara1979 пишет:
Грубо говоря, после echo ""; попытка передать заголовок вызовет ошибку.


Зашибись и че мне делать?
 
 Top
Viper
Отправлено: 06 Ноября, 2014 - 08:27:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




razorg1991 вызов непосредственно метода createZipArchive с параметрами приводит к ошибке или нет?

Закомментируйте ProcessingImages::createZipArchive($namezip); в elseif - ошибка есть или нет?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
razorg1991
Отправлено: 06 Ноября, 2014 - 08:57:21
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Viper пишет:
Закомментируйте ProcessingImages::createZipArchive($namezip); в elseif - ошибка есть или нет?


Нет ошибка остается Огорчение та же (кэш почистил если что)
 
 Top
kotyara1979
Отправлено: 06 Ноября, 2014 - 11:18:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




Причем тут создание архива?
Сказано же
Цитата:
output started at W:\home\localhost\www\autocsv\core_classes\BaseClass.php:13


файл BaseClass.php строка 13 начинается вывод.

razorg1991 пишет:
Зашибись и че мне делать?

всего лишь отдать заголовки до вывода информации. В чем проблема то?


-----
Сделать можно все. Главное одеть каску.
 
 Top
razorg1991
Отправлено: 06 Ноября, 2014 - 20:04:03
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




kotyara1979 пишет:
файл BaseClass.php строка 13 начинается вывод.


Файл BaseClass.php строка 13

PHP:
скопировать код в буфер обмена
  1.  
  2. static function loadHtml() {
  3.                echo '<!DOCTYPE html>
  4.                 <html lang="ru">';
  5.            }
  6.  


kotyara1979 пишет:
всего лишь отдать заголовки до вывода информации. В чем проблема то?


Всего-то навсего переписать весь код проекта Ха-ха
 
 Top
Sail
Отправлено: 06 Ноября, 2014 - 20:16:13
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




razorg1991 пишет:
Всего-то навсего переписать весь код проекта Ха-ха

Попробуйте Функции контроля вывода
Цитата:
Это может быть полезно в различных ситуациях, особенно если вам необходимо отправить заголовки в браузер после того, как ваш скрипт уже начал выводить данные.

Там есть и примерчик базового использования.
 
 Top
razorg1991
Отправлено: 06 Ноября, 2014 - 20:27:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Вообще как-то можно реализовать по-другому выдачу еще не созданного файла на скачивание?
 
 Top
Мелкий Супермодератор
Отправлено: 06 Ноября, 2014 - 21:50:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




razorg1991 пишет:
Всего-то навсего переписать весь код проекта

Ну раз сглупили - теперь разгребайте.


-----
PostgreSQL DBA
 
 Top
Sail
Отправлено: 06 Ноября, 2014 - 22:36:18
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)





Мелкий пишет:
Ну раз сглупили - теперь разгребайте.

Возможно, оно в проекте досталось в наследство Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB