PHP скрипт для скачивания файлов

Недавно я столкнулся с интересной проблемой. На одном сайте нужно было реализовать прослушивания (онлайн) и скачивания mp3 файлов.  Вроде ничего сложного – все сделал, реализовал скрипт на php загрузки файлов с подсчетом количества скачиваний, все работает – файлы проигрываются и даже скачиваются без проблем. Но через некоторое время выяснилось, что со скачиванием есть одна маленькая, но очень обидная, проблема. Так как я пользуюсь браузером Опера, я этого сначала не заметил, поскольку опера скачивала все как надо – спросила: открыть или скачать, все ок. А Интернет Эксплорер выявился не такой вежливый – он не спрашивал, он просто по умолчанию запускал Медиа-плеер. А для рядового пользователя скачать этот mp3-файл оказывается довольно тяжело.

Такая проблема может возникнуть и с другими типами файлов (doc,  pdf, xls, jpg, gif и т.д.), будет запускаться, ассоциируемая с этим типом файла,  программа. А не всегда это удобно, и это нам нужно.

Пришлось не мало перелопатить интернета, чтобы найти подходящее решение (точнее подходящий php-скрипт) для меня.

Провожу  вашему вниманию - PHP скрипт для скачивания файлов:

<?php

$filename = $_GET['filename'];
 
 // нужен для Internet Explorer, иначе Content-Disposition игнорируется
if(ini_get('zlib.output_compression'))
  ini_set('zlib.output_compression', 'Off');
 
$file_extension = strtolower(substr(strrchr($filename,"."),1));
 
if( $filename == "" )
{
          echo "ОШИБКА: не указано имя файла.";
          exit;
} elseif ( ! file_exists( $filename ) ) // проверяем существует ли указанный файл
{
          echo "ОШИБКА: данного файла не существует.";
          exit;
};
switch( $file_extension )
{
          case "pdf": $ctype="application/pdf"; break;
          case "exe": $ctype="application/octet-stream"; break;
          case "zip": $ctype="application/zip"; break;
          case "doc": $ctype="application/msword"; break;
          case "xls": $ctype="application/vnd.ms-excel"; break;
          case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
          case "mp3": $ctype="audio/mp3"; break;
          case "gif": $ctype="image/gif"; break;
          case "png": $ctype="image/png"; break;  
          case "jpeg":
          case "jpg": $ctype="image/jpg"; break;

          default: $ctype="application/force-download";
}

header("Pragma: public"); 
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // нужен для некоторых браузеров
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename)); // необходимо доделать подсчет размера файла по абсолютному пути
readfile("$filename");
exit();

?>

 Данный скрипт поможет вам управлять скачиванием файлов с вашего сайта. Не допускать браузерам запускать ассоциированную программу с данным файлом по умолчанию (mp3, doc, pdf и т.д.),  а всегда спрашивать у пользователя что нужно делать (открыть или сохранить).

Создайте файл dl_save.php скопируйте туда код.

Ссылку на скачивания файла оформлять нужно (примерно) так:

<a href="dl_save.php?filename=file.mp3">Скачать</a>

Где file.mp3 – заменяйте своим файлом, если нужно, прописывайте полный путь к файлу (и путь к dl_save.php).

Если через редирект:

header("Location:  dl_save.php?filename=file.mp3");



Дальше: Создание сайта недвижимости (агентства недвижимости)


Дискуссия по теме    70 Комментариев
Добавить комментарий
Konstantin 26.11.2017 ? 06:13
Скрипт конечно классный. НО! Это огромная дырень в безопасности Вашего сайта :) Просто вместо мп3-шки вписываем туда index.php или ЛЮБОЕ имя PHP-файла на Вашем сервере и СКАЧИВАЕМ СКРИПТЫ! А в скриптах уже что угодно будет - и логины-пароли от баз данных... и внутренняя логика работы сайта... можно слить всё, что хошь! :) За изобретение - ПЯТЬ! За безопасность - ДВА! :))))
Igor 20.02.2017 ? 19:22
Здравствуйте! Скрипт отлично работает на ПК , а вот для телелфона этот вариант неработает (подскажите как чтоб и телефон скачивал)? Спасибо!
Дмитрий 19.12.2015 в 14:19
При скачивании jpg файла не открывает его. Пишет файл поврежден или является слишком большим.
Владимир 17.10.2015 в 21:44
Спасибо, работает как часы. Много где что предлагали, но как ни странно не работало. Автору )
Ya 03.05.2015 в 19:08
У меня при нажатии на ссылку СКАЧАТЬ в этом же окне открывается вот что: %PDF-1.5 %
Dima 13.12.2014 в 23:23
НЕ поленюсь и напишу :) СПАСИБО! РАБОТАЕТ! ОБЛЕГЧИЛИ ЖИЗНЬ! 1 К КАРМЕ
Дмитрий 22.08.2014 в 02:27
Огромное спасибо, очень помогли!
Mrgord 30.06.2014 в 18:14
Спасибо за скрипт
Sasha 28.02.2014 в 20:32
Добрый день. Как сделать так, чтобы загрузка файлов была с другого сайта? У меня на сайте ссылки с Dropbox вида: https://dl.dropboxusercontent.com/u/31217182/Ringtons/inna-alright.mp3 Помогите, очень нужно
Exvayn 06.12.2013 в 10:30
если ссылка ведет на php документ, который в свою очередь редиректируется на файл, то скрипт не будет работать?
Тарас 07.12.2013 в 00:05
Попробуйте.
Ирина 09.11.2013 в 20:14
Подскажите пожалуйста подойдет этот скрипт для генератора поздравительного письма? Есть шаблон(фон-картинка), на который пользователь пишет свой текст и генерируется письмо. Затем чтобы распечатать его пользователь сохраняет его в файл (т.к. не у всех есть цветные принтеры) Подойдет ли ваш скрипт для такой цели? Сейчас письмо генерирует и его можно только распечатать. при сохранении же сохраняется только фон-картинка без текста.
Тарас 10.11.2013 в 17:17
В каком формате генерируется письмо? Это картинка или html документ?
andronick83 08.11.2013 в 03:38
Для скачки файла достаточно просто добавить ссылке атрибут download: <a href="file.mp3" download="имя-файла.mp3">Скачать</a> И ненужно никаких скриптов.
Роман 03.03.2014 в 11:42
вы гений! Спасибо
Кристина 21.09.2013 в 09:30
Здравствуйте! Помогите пожалуйста, сделала все по правилам,но при нажатии на ссылку загружается пустая страница и при этом файл скачивается. Уже и одинарные кавычки поставила и полный адрес файла накалякала, ничего не получается. Что сделать не знаю.
Михаил 17.09.2013 в 00:36
В браузерах Опера-некст и Яндекс качает без предупреждения. В Гугл-хром предлагает только сохранить. Поправить можно?
didsico 14.09.2013 в 12:23
А где прописывается путь до файлов? Как реализовать подсчет скачиваний?
Тарас 14.09.2013 в 23:58
Путь к файлам прописывается так: dl_save.php?filename=file.mp3 Подсчет можно реализовать внутри этого php файла... хоть в бд пиши, хоть в файл... еще есть готовый скрипт для подсчета скачиваний - http://sitear.ru/material/schetchik-skachivanij-faila
Дмитрий 26.08.2013 в 11:57
Добрый день! Всё поставил, как написано, но выдаёт ошибку 404.
Тарас 26.08.2013 в 20:10
Ищите проблему в самом движке... этот код не может выдавать ошибку 404, в любом случае будет приходить код ответа сервера 200, даже если нету файла. Возможно доступ к php файлу запрещен условиями в .htaccess
Дмитрий 26.08.2013 в 20:25
Разобрался. Всё отлично работает. Скрипт просто ОТЛИЧНЫЙ! Спасибо Вам за труды!)
Дмитрий 26.08.2013 в 09:33
Подскажите, а на Денвере этот код работает? Спасибо!
Максим 23.08.2013 в 00:13
Все поставил, все как бы работает, но есть одна БОЛЬШАЯ проблема. После скачивания изображения в формате jpg пытаюсь его открыть на компе, а не выходит "Просмотр недоступен". В чем может быть причина?
Сергей 21.07.2013 в 21:15
Автор огромнейшее спасибо!!! Очень выручил!!! Всё отлично работает!!! Устал я интернет со всякими непонятными штуками перекапывать. А тут готовый вариант! Респект и уважуха!!
биржа труда 18.07.2013 в 09:24
Не плохой скрипт вполне может пригодится для скачки бланков резюме.
Дмитрий 02.07.2013 в 00:50
Спасибо огромное! Скрипт СУПЕР!!!
Irisha 24.05.2013 в 16:28
Любой браузер (IE, GC...) вместо того, чтобы спросить, что делать (сохранить/открыть) "пишет" абракадабру из mp3-файла. Почему?
Sveta 18.04.2013 в 21:34
спасибо огромное за уделенное время! Все получилось. Спасли меня.
Sveta 09.04.2013 в 21:41
помогите, пожалуйста. Создала файл dl_save.php в корне папки сохранила, файл который будут скачивать туда же положила. <a href="dl_save.php?filename=p1.xls" >Прайс</a> только у меня теперь когда заходишь на эту страницу где ссылка для скачивания файла пишет ошибку: "Parse error: syntax error, unexpected T_STRING in ..." Что с этим делать? Я в этом деле не сильна пока.
Тарас 10.04.2013 в 00:50
В какой строке выдает ошибку? в конце ошибки должно быть in line далее цифра... цифра это строка кода в которой ошибка.
Sveta 10.04.2013 в 16:31
Я проверила, номер строки который пишут в этой ошибке, совпадает со строкой кода <a href="dl_save.php?filename=p1.xls" >Прайс</a>
Sveta 16.04.2013 в 22:38
Помогите, пожалуйста с этим. Что можете посоветовать?
Тарас 17.04.2013 в 12:49
Можете прислать мне файл на почту tarik_alka[собака]mail.ru Посмотрю код.
Sveta 17.04.2013 в 17:58
Я вам отправила, посмотрите, пожалуйста.
Тарас 17.04.2013 в 23:01
Синтаксическая ошибка. Вместо двойных скобок (") используйте одинарные (') в этой строке кода. Вот так: <a href='dl_save.php?filename=p1.xls'>Прайс</a>
Леша 26.03.2013 в 00:17
Уменя все время выдает "Не указано имя файла". В самом PHP меняется только имя файла или что-то еще? Путь перед именем файла в РНР не надо прописывать? А здесь тоже все остается как есть? case "pdf": $ctype="application/pdf"; break; default: $ctype="application/force-download"; Спасибо!
Тарас 26.03.2013 в 01:31
путь надо тоже прописывать перед именем файла.
Леша 28.03.2013 в 23:23
Тарас, нельза ли вам потать код? У меня все равно скрипт не находит файла для скачивания.Если можно то куда?
Леша 28.03.2013 в 23:59
Я имел в виду ПОСЛАТЬ код :-)
Тарас 29.03.2013 в 00:38
Присылайте на tarik_alka[собака]mail.ru
Леша 01.04.2013 в 19:13
Тарас, вы получили код? Я его уже послал два раза ;-)
Тарас 03.04.2013 в 14:34
Да получил. Скрипт "думает" что ваш файл по адресу php/files/manuals.pdf Так как этот срипт содержиться в папке php, ему необходимо подняться на уровень высше а потом переходить по пути files/manuals.pdf Попробуйте поместить файл скрипта в корневую папку... так будет проще. Или же пропишите путь так: ../files/manuals.pdf хотя не уверен что этот путь будет работать.
Александр 01.01.2013 в 05:11
Тарас спасибо, но одна ошибочка у тебя. Надо: <a href="http://вашсайт.ру/dl_save.php?filename=film/film.mp4">Скачать</a></p> - не надо перед папкой film ставить черточку. Все получилось, еще раз огромное спасибо автору!!!
Александр 29.12.2012 в 17:37
Отличный скрипт! Перед dl_save.php? поставил адрес моего сайта. Скрипт находится в корне. Не могу поставить путь для скачивания( адрес сайта/film/film.mp4)куда и как его поставить в ссылку? Если не ставить адрес файла то он скачивается по умолчанию из корня, что не очень то удобно. Help! Спасибо
Тарас 30.12.2012 в 23:14
Правильно будет так: dl_save.php?filename=/film/film.mp4 или так: http://вашсайт.ру/dl_save.php?filename=/film/film.mp4
Zura 12.12.2012 в 18:09
Огромное спасибо!У меня скачивание перебивал QuickTime и вместо скачивания начинал проигрывать.Данным способом решил эту проблему. Отличный материал!!!
марлен 09.11.2012 в 16:25
если это бесконечный поток mp3 можно его сделать как нибудь на скачивание? спасибо
Анья 24.10.2012 в 18:41
Почему у меня не работает? В чем причина?
Тарас 24.10.2012 в 23:37
Да в чем угодно. Что пишет? Какую ошибку выдает? Если есть дайте ссылку на пример...
Показать более ранние комментарии (20) →
Добавить комментарий
Просмотров: 67310
Страхование КАСКО
карта банка
ндфл
усн
Оформление доверенности
страхование ипотеки
esim
осаго
ВЗР страхование
кредитная карта
Cialis barato Viagra Contrareembolso Cialis 5 mg precio mejores farmacias para comprar Viagra reacciones adversas de Cialis Reduslim cómo tomar soluciones para la impotencia Sildenafil Comprare Cialis 5 mg Giornaliero online in Italia Effetti indesiderati del Cialis 5 mg Acquista Cialis 20mg Cialis originale in vendita In Svizzera si compra il Viagra senza ricetta Cialis 10mg online Acquista Viagra in farmacia Offerta Cialis 5mg Spedra Avanafil in vendita online Acquista Viagra in Svizzera senza prescrizione авиатор спрайб Consegna a domicilio di Cialis 5 mg Effetti collaterali di Cialis 5 mg Consegna a domicilio di Cialis 20mg Acquista Cialis originale generico in Svizzera Consegna a domicilio di Viagra senza ricetta in Svizzera Compra Cialis 10mg Consegna a domicilio di Viagra in farmacia online Sconto Cialis 5mg Comprar Reduslim por internet Comprare Spedra Avanafil senza ricetta online Dove comprare il Viagra in Svizzera Compra Cialis Comprar online Viagra Contrareembolso Dónde encontrar Cialis 5 mg al mejor precio Viagra sin receta Cialis 5 mg efectos secundarios graves Reduslim comprar en línea Disfuncion Erectil tadalafilo avanafil prezzo cialis 20 mg prezzo cialis effetti benefici cialis 10 mg Reduslim Kaufen pulse x coin price