За последние 24 часа нас посетил 20861 программист и 931 робот. Сейчас ищут 573 программиста ...

Как отдать файл на загрузку

Тема в разделе "PHP для новичков", создана пользователем 440Hz, 13 дек 2007.

  1. Ururu

    Ururu Активный пользователь

    С нами с:
    21 апр 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Москва
    Яж просто к слову ... и ненужно придиратся =)) Говорю что знаю и что сам испробовал не раз =)))
    http://operafan.net/forum/index.php?topic=1437.0
    http://www.myopera.net/forums/arhiv/42518.html
    Думал может что поменялось, проверил (у меня 9.51). собственно тип не прописан ))

    А вообще пофик, это к теме всеравно не относится. Сори за оффтоп.
     
  2. DVV

    DVV Активный пользователь

    С нами с:
    3 июн 2009
    Сообщения:
    5
    Симпатии:
    0
    Я делал загрузку Экселевского файла и
    у меня как дополнение возник такой вопросик:

    и приведенный скрипт, и мой для сохранения отрабатывают отлично, но если я выбираю "Открыть", то и Эксель и блокнот выдают сообщение, что не могут найти файл во временных каталогах IE. И далее, если запустить перед этим Эксель, то файл откроется нормально. Для текстового файла каждый раз запускается новая копия блокнота и файла они, соответственно, не видят.
    Как можно это побороть?
     
  3. Paltash

    Paltash Активный пользователь

    С нами с:
    9 июн 2009
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток!
    У меня такой вопрос по теме:
    Сделал всё как указано у Уважаемого 440Hz во втором варианте.
    боле-мене разобрался. Но вопрос оказался такой:
    можно-ли отдать несколько файлов на загрузку за один клик мыши пользователем?
    то есть пользователю выводится список файлов, он отмечает нужные, жмёт кнопку "получить"
    и есму предлагается сохранить те файлы которые он выбрал.

    • a. Пробовал сделать так, чтобы открывалось окно для каждого файла, но это не хорошо т.к. у пользователя могут быть заблокированы всплывающие окна.
      b. Пробовал вставлять код для отдачи файлов в форму выбора, но отдаётся только один файл.
    Пробовал вставлять в downloadfile.php, после кода отдачи файла, конструкцию
    Код (Text):
    1. <HTML><HEAD></HEAD><body onLoad='window.close()'><body></html>
    так почему-то при скачивании у файла оказывается расширение "html". :? Хотя файлы исключительно pdf и окно не закрывается.


    Код (Text):
    1.  
    2.    if ($action == 'download')
    3.     {
    4.         $listfiles=" -1";
    5. ?>
    6.             <HTML><HEAD>
    7.             <META HTTP-EQUIV='Refresh' CONTENT='5; URL=../orders/orders.php'>
    8.             <LINK rel=stylesheet href="../style.css" type="text/css">
    9.             <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10.             <script type="text/javascript">
    11.             function opendownload(){
    12.                    var sUrl="downloadfile.php";
    13.                    <?
    14.         foreach ($chk as $fileid)
    15.         {
    16.              print "\n window.open('downloadfile.php?fileId=".$fileid."');\n";
    17.         }
    18.                   ?>
    19.                 }
    20.             </script>
    21.             </HEAD>
    22.             <body onload = 'opendownload()'>
    23.             <div class='hlphead'>Загрузка будет открыта в новом окне.</div>
    24.             <br>Вы будете перенаправлены на другую страницу через 4 секунды...<br>
    25.             Нажмите <a href=../orders/orders.php>здесь,</a> если не хотите ждать.
    26.             </BODY>
    27.             </HTML>
    28.             <?
    29.         die;
    30.     }
    код downloadfile.php - идентичен у Уважаемого 440Hz .
    Может я что-то не так делаю? Подсобите, плиз...[/list]
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    можно НО НЕ НУЖНО!
     
  5. Paltash

    Paltash Активный пользователь

    С нами с:
    9 июн 2009
    Сообщения:
    2
    Симпатии:
    0
    Тогда такой вопрос:
    можно-ли отдать файл по клику, не закрывая форму и не открывая ещё одно окно?
    или это уже не про php?
     
  6. DVV

    DVV Активный пользователь

    С нами с:
    3 июн 2009
    Сообщения:
    5
    Симпатии:
    0
    а по моему вопросику кто-то что-то скажет? (((
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Paltash

    отдавай файл на скачку в том же окне. броузер его не закроет, а выдаст форму на сохранение.
     
  8. silverworld

    silverworld Активный пользователь

    С нами с:
    1 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Ðîññèÿ
    Как отдать файл на загрузку

    ЕÑ
     
  9. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Есть утилита BARCONV.EXE по переводу записей bar и dbf и обратно.
    Как она работает, можно посмотреть в библиотеке KONTORG_CONV.
    Лучше попытаться восстановить файл из архива и в последующем очищать его от ненужных записей.
     
  10. Anonymous

    Anonymous Guest

    Как отдать файл на загрузку

    Есть утилита BARCONV.EXE по переводу записей bar и dbf и обратно.
    Как она работает, можно посмотреть в библиотеке KONTORG_CONV.
    Лучше попытаться восстановить файл из архива и в последующем очищать его от ненужных записей.
     
  11. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Код (Text):
    1. RewriteRule (.+?)/(.+?)/(.+) /_files/_tmp/$1 [L,T="application/octet-stream"]
    2. Header set Content-Type "application/octet-stream"
    3. Header set Content-Disposition "attachment; filename='aa.pdf'"
    файл открывается в браузере. А нужно что б открывался диалог сохранения файла. Что я делаю не так?
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    плагин для pdf стоит похоже.
     
  13. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    1) плагин отключен
    2) открывается файл так, как будто он text/html %PDF-1.4 %вгПУ 76 0 obj<> endo...

    заголовки ответа:
    Код (Text):
    1. HTTP/1.1 200 OK
    2. Sun, 13 Dec 2009 15:39:46 GMT日本語
    3. Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4日本語
    4. Tue, 17 Nov 2009 11:12:27 GMT日本語
    5. "69ad-3bea5-338fd204"日本語
    6. bytes日本語
    7. 245413日本語
    8. text/html; charset=windows-1251日本語
    то есть хедер не поставился.
     
  14. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    если че: этот файл, который в /_files/_tmp/ - он без расширения даже. Выглядит примерно так: ffddced65b0f7e0ad3f29c7fcbdf11b0c4ff97c3.
     
  15. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    ну так выясни почему не поставились заголовки.

    я отдавал такие файлы через скрипт.
     
  16. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    через скрипт отдавать низя. Нагрузка большая будет.
    Не ставятся заголовки и все. Не могу понять, чего

    Код (Text):
    1. addDefaultCharset windows-1251
    2. Options -Indexes
    3.  
    4. ForceType application/octet-stream
    5. Header set Content-Disposition attachment
    6.  
    7. <IfModule mod_rewrite.c>
    8.     RewriteEngine on
    9.     RewriteBase /
    10.  
    11.     RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    12.     RewriteRule ^(.*) http://%1/$1 [L,R=301]
    13.  
    14.     RewriteCond %{REQUEST_FILENAME} !-f
    15.     RewriteCond %{REQUEST_FILENAME} !-d
    16.     RewriteRule . /index.php [L]
    17. </IfModule>
    тут - ставятся (корень сайта)

    Код (Text):
    1. RewriteEngine On
    2. #RewriteBase /download/
    3. RewriteBase /
    4.  
    5. # кука не установлена. Это анонимус. Редиректим его на страницу входа
    6. RewriteCond %{HTTP_COOKIE} !hash=.*
    7. RewriteRule (.*) /login [L,R]
    8.  
    9. # берем 4 символа с 5 позиции из кукиса
    10. RewriteCond %{HTTP_COOKIE} hash=([0-9a-z]{5})([0-9a-z]{4}).+
    11. # проверяем наличие файла, разрешающего доступ (по сути это isUser)
    12. RewriteCond /home/localhost/univer/cache/%2.access !-f
    13. # в противном случае у пользователя фейковая кука
    14. RewriteRule (.*) /login [L,R]
    15.  
    16. # кука есть, она не фейковая, загружаем файл
    17. ForceType application/octet-stream
    18. Header set Content-Disposition attachment
    19.  
    20. RewriteRule (.+?)/(.+?)/(.+) /_files/_tmp/$1 [L]
    а тут (download/.htaccess) - нет.
     
  17. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  18. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    понятия не имею, стоит AllowOverride или нет. Проблема решилась так: хедеры нужно ставить не в той папке, в которой распарсивание URL'а происходит, а в той, где файл фактически расположен.
     
  19. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Прикольный ты оказывается товарищ.
    Я бы не догадался жаловаться, что жена соседа не дает, хотя штамп в паспорте у меня есть :)
     
  20. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    откуда ж я знал-то? я думал, что если я этим .htaccess'ом провожу роутинг и проверку аутентификации, то стало быть им же могу и заголовки отправить.
     
  21. `p r o x y

    `p r o x y Активный пользователь

    С нами с:
    21 июл 2010
    Сообщения:
    32
    Симпатии:
    0
    Время доброго.

    440Hz, подскажи, пожалуйста, а есть ли варианты, что бы прикрутить к твоей реализации скрипта скачивания файла с докачкой следующее:
    * имя файла на сервере scsdc8.rar
    * имя файла отдаваемоего пользователю my_file.rar

    Если да, то хоть в намеках как?
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    header("Content-Disposition: attachment; filename=\"{$filename}\"");

    что тут заместо filename напишешь - так и будет называться
     
  23. `p r o x y

    `p r o x y Активный пользователь

    С нами с:
    21 июл 2010
    Сообщения:
    32
    Симпатии:
    0
    igordata
    Круть, благодарю, поэксперементирую..
     
  24. serjp

    serjp Активный пользователь

    С нами с:
    19 сен 2010
    Сообщения:
    1
    Симпатии:
    0
    Адрес:
    донецкая обл.
    Доброе время суток, применил скрипт с поддержкой докачки , после скачивания файлы с rar, или exe "другие не пробывал "
    rar-пишет 3 ошибки
    (архив повреждён или имеет неизвесный формат,
    неожиданый конец архива,
    архив повреждён или имеет неизвесный формат)
    exe-вообще не запускается.
    Подскажите пожалуйста, вчем прмчина? У меня stpserver.
     
  25. amen

    amen Активный пользователь

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан