За последние 24 часа нас посетили 17695 программистов и 1709 роботов. Сейчас ищут 1732 программиста ...

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

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

  1. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Это ожидаемое (нормальное) поведение браузера при получении файла в ответ на отправленную форму.
    Не про php.
     
  2. 440Hz

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

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

    windows.location.href="файло"
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да это бот рекламный =)
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Не, то хороший вопрос. Я думал что без нового окна - никак о_О
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а что значит новое окно?

    а флешем можно точно все это замутить. я так понимаю, что и html5 можно сделать всякое красивое с одной кнопкой.
     
  6. lustoff

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

    С нами с:
    7 апр 2012
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте!
    Нужен самый простой скрипт для скачивания файла.
    Использую такой
    Код (Text):
    1. $file = ("mashka.rar");
    2. header ("Content-Type: application/octet-stream");
    3. header ("Accept-Ranges: bytes");
    4. header ("Content-Length: ".filesize($file));
    5. header ("Content-Disposition: attachment; filename=".$file);
    6. readfile($file);
    Работает, но не отображается процесс загрузки файла. Как его слегка усложнить, чтобы процесс загрузки отображался?
    П.С. Второй скрипт из темы пробовал, но почему-то не качает.
     
  7. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    файл находится в той же директории что и скрипт ? если нет , то в filesize($file) нужно добавить абсолютный путь файла
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    ага, скорее всего filesize() не смог определить размер.

    Добавлено спустя 1 минуту 38 секунд:
    … а варнинги отключены. вообще-то функция умеет порождать варнинг и тем убивать скачиваемый файл )))

    Добавлено спустя 1 минуту 4 секунды:
    Код (PHP):
    1. $file = dirname(__FILE__). "/mashka.rar";
    2. ...
    3. header ("Content-Disposition: attachment; filename=".basename($file));
    4.  
     
  9. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Не получается сделать загрузку файлов, пробывал несколько вариантов кода, любой загружает файл, но при открытии говорит что файл поврежден...Такое впечатление что скрипт дописывает что - то в файл, ибо размер на входе 100кб на выходе 101кб..

    Вот код которым гружу файл:

    Код (Text):
    1. function file_download($filename, $mimetype='application/octet-stream') {
    2.   if (file_exists($filename)) {
    3.     header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
    4.     header('Content-Type: ' . $mimetype);      
    5.     header('Last-Modified: ' . gmdate('r', filemtime($filename)));
    6.     header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename)));
    7.     header('Content-Length: ' . (filesize($filename)));
    8.     header('Connection: close');
    9.     header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
    10.     echo file_get_contents($filename);
    11.   } else {
    12.     header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    13.     header('Status: 404 Not Found');
    14.   }
    15.   exit;
    16. }
    Пробывал использовать простейший код из этой темы, результат тот же(
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Может быть, utf-8 + BOM?
    А также: как заканчивается скрипт? В конце есть
    Код (Text):
    1. ?>
    ?
    Если есть, то после него точно ничего нету - никаких пробелов, переводов строк там и т.п...?
     
  11. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Проверил, ничего такого нету, ни пробелов, ничего...
    Файл utf-8 без bom
     
  12. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Возьми два файла - один оригинальный, а другой - скаченный через этот скрипт и ищи отличия :) Найдёшь - проще будет попытаться сообразить, откуда они вылезли.
    Возможно, там какой-нибудь PHP-Warning или Notice проскакивает.
     
  13. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Скачиваю тот же файл через фтп все нормально открывает, уже не знаю где копать(
    Отличия между файлами 1 кб
    Что то левое пишется в файл. но где непонятно...
     
  14. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Я бы если бы не мог найти ошибку в коде скрипта - открыл бы оба файла просто в текстовом редакторе и глазами бы пробежался по всем тем кракозябрам, что внутри, и попробовал бы найти отличия.
     
  15. produser

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

    С нами с:
    21 янв 2012
    Сообщения:
    61
    Симпатии:
    0
    Открыл текстовым редактором, в нутри начало хтмл кода страницы с которой происходит загрузка, до момента кнопки при нажатии на которурю скачивается файл... Уже ничего не понимаю...
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Хе :)
    Смотри код скрипта, который отдаёт файл. Естественно, что любой html-код, который выводится этим скриптом - будет также отправлен вместе с файлом... Перед
    Код (PHP):
    1. <?php
    тоже ничего не должно быть.
     
  17. al12.nazarov

    al12.nazarov Новичок

    С нами с:
    28 янв 2016
    Сообщения:
    4
    Симпатии:
    0
    Всех приветствую. В данном вопросе я полный профан, так что сильно не материте, если буду тупить. Разместил код для скачивания файлов на сайте. Файлы скачиваются, но не открываются. Задал вопрос в службу поддержки хоста, они прислали мне коды ошибок. Подскажите пожалуйста, что они означают и как все исправить?

    Вот этот код я поставил на сайт:

    Код (PHP):
    1. <?php
    2. $file = $_GET['file'];
    3.     if (ob_get_level()) {
    4.         ob_end_clean();
    5.     }
    6.     header('Content-Description: File Transfer');
    7.     header('Content-Type: application/octet-stream');
    8.     header('Content-Disposition: attachment; filename=' . basename($file));
    9.     header('Content-Transfer-Encoding: binary');
    10.     header('Expires: 0');
    11.     header('Cache-Control: must-revalidate');
    12.     header('Pragma: public');
    13.     header('Content-Length: ' . filesize($file));
    14.     readfile($file);
    15.  

    Вот такие ошибки прислали из службы поддержки:

    Код (PHP):
    1. <br />
    2. <b>Warning</b>: filesize(): stat failed for public_html/skachat/tabl.shtraf.zip in <b>/home/xrrkbnkk/public_html/download.php</b> on line <b>13</b><br />
    3. <br />
    4. <b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/xrrkbnkk/public_html/download.php:13) in <b>/home/xrrkbnkk/public_html/download.php</b> on line <b>13</b><br />
    5. <br />
    6. <b>Warning</b>: readfile(public_html/skachat/tabl.shtraf.zip): failed to open stream: No such file or directory in <b>/home/xrrkbnkk/public_html/download.php</b> on line <b>14</b><br /> 
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  18. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    что в $_GET['file']? и это дырка в безопасности чтобы прочитать все твои файлы
     
  19. al12.nazarov

    al12.nazarov Новичок

    С нами с:
    28 янв 2016
    Сообщения:
    4
    Симпатии:
    0
    Я не понимаю вопроса. Объясните мне, если не сложно. Я этот код где-то в инете нарыл. А как он работает, я вообще не знаю.
     
  20. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Прямая дорога в ад. Ваш код уязвим. Достаточно подставить handler.php?file=\etc\passwd и злоумышленник получит нужную ему информацию.
    Осуществляйте проверки. Как на сам файл, так и на его директории, если так хотите чтобы он передавался через GET.
    (is_file)
     
  21. al12.nazarov

    al12.nazarov Новичок

    С нами с:
    28 янв 2016
    Сообщения:
    4
    Симпатии:
    0
    Понятно. Пытался найти модуль для скачивания файлов и установить в шаблон, но больно уж они замудреные. PHP некоторые люди вообще не советуют. Вот я в растерянности, как осуществить задуманное. В моем случае простенький модуль подошел бы, для отдачи у меня небольшие файлы, да и количество небольшое. Но что-то подходящее найти не могу.
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    почему ты считаешь, что он уязвим? Там же есть бейзнейм!
     
  23. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Игорь, там basename только в заголовке, а в readfile - нету.
     
  24. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Хуесосы, шлите их нафиг.
    Возможно вам стоит заглянуть сюда или сюда
     
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    пипец ты глазастый. Ты кстати фансоро разглядывал, а мой могучий пинпай - нет. Печалька.