Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузка файлов
 
 автор: Jaroslav   (13.11.2009 в 16:53)   письмо автору
 
 

Подскажите ,пожалуйста, как решить такую проблему.
Нужно, чтобы скачивались mp3 файлы.
Если в файле прописать:

*************************
header("Content-Disposition: attachment; filename=/upload/378/25449049100279.mp3");
header("Content-Type: application/x-force-download; name=/upload/378/25449049100279.mp3");
*************************

то на выходе предлагается скачать файл:

_upload_378_25449049100279

Почему идет замена / на _ - как этого избежать?

  Ответить  
 
 автор: Trianon   (13.11.2009 в 17:01)   письмо автору
 
   для: Jaroslav   (13.11.2009 в 16:53)
 

Инициатива загрузки файла принадлежит клиенту.
Сервер не имеет никаких прав указывать, в какой каталог клиенту класть файл.
В общем случае появление слэшей в имени объекта - нарушение.

  Ответить  
 
 автор: Jaroslav   (13.11.2009 в 17:09)   письмо автору
 
   для: Trianon   (13.11.2009 в 17:01)
 

mp3 файлы - лежат по папкам...
При клике на ссылку (скачать) - идет открытие mp3 трека в QuickTime
Хочу обойти это дело и сделать так, чтобы предлагалось скачивание в любом случае, а не открывались файлы в браузере. Есть ресурсы, на которых это реализовано. Механизм, наверно, примерно такой.. Сначала идет ссылка на php файл, в который в качестве переменной передается путь к файлу, в нем - см. выше... Разве не так?

  Ответить  
 
 автор: Trianon   (13.11.2009 в 17:55)   письмо автору
 
   для: Jaroslav   (13.11.2009 в 17:09)
 

>Сначала идет ссылка на php файл, в который в качестве переменной передается путь к файлу, в нем - см. выше... Разве не так?

Так переделайте php-файл. По-моему, так.
Какая там ссылка - никого не трогает.
Мешает именно возвращаемое имя.
И даже не само имя, а слэши в нем.

  Ответить  
 
 автор: Jaroslav   (13.11.2009 в 18:02)   письмо автору
 
   для: Trianon   (13.11.2009 в 17:55)
 

А как его переделать? можете привести пример?

  Ответить  
 
 автор: Trianon   (13.11.2009 в 18:06)   письмо автору
 
   для: Jaroslav   (13.11.2009 в 18:02)
 

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

Могу, конечно. Но не испытываю никаких побудительных мотивов. Поскольку ничему не научит.
Не говоря о том, что подобного рода примеры приводились мной, и не только мной.

  Ответить  
 
 автор: Jaroslav   (16.11.2009 в 18:54)   письмо автору
 
   для: Trianon   (13.11.2009 в 18:06)
 

Большое спасибо. Механизм понятен :)
Может, кому пригодится...



<?php

function dl_file($file){

    
//First, see if the file exists
    
if (!is_file($file)) { die("404 File not found!"); }

    
//Gather relevent info about file
    
$len filesize($file);
    
$filename basename($file);
    
$file_extension strtolower(substr(strrchr($filename,"."),1));

    
//This will set the Content-Type to the appropriate setting for the file
    
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 
"gif"$ctype="image/gif"; break;
      case 
"png"$ctype="image/png"; break;
      case 
"jpeg":
      case 
"jpg"$ctype="image/jpg"; break;
      case 
"mp3"$ctype="audio/mpeg"; break;
      case 
"wav"$ctype="audio/x-wav"; break;
      case 
"mpeg":
      case 
"mpg":
      case 
"mpe"$ctype="video/mpeg"; break;
      case 
"mov"$ctype="video/quicktime"; break;
      case 
"avi"$ctype="video/x-msvideo"; break;

      
//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
      
case "php":
      case 
"htm":
      case 
"html":
      case 
"txt": die("Cannot be used for "$file_extension ." files!>"); break;

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

    
//Begin writing headers
    
header("Pragma: public");
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: public");
    
header("Content-Description: File Transfer");

    
//Use the switch-generated Content-Type
    
header("Content-Type: $ctype");

    
//Force the download
    
$header="Content-Disposition: attachment; filename=".$filename.";";
    
header($header );
    
header("Content-Transfer-Encoding: binary");
    
header("Content-Length: ".$len);
    @
readfile($file);
    exit;
}
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования