Помогите реализовать нормальную скачку mp3 файлов с сайта

Статус
В этой теме нельзя размещать новые ответы.

fredis69

Постоялец
Регистрация
24 Окт 2008
Сообщения
84
Реакции
2
Здравствуйте,

Есть сайт на котором распологаются mp3 файлы, при нажатии чтобы скачать, запускается проигрыватель QuickTime и в браузере проигрывается этот файл, как сделать чтобы этого нпроисходило, а появлялось окно для сохранения файла,

при скачивании идет редирект на новую страницу где из бд вытаскивается путь к файлу и опять редиректится на на сам файл,

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

помогите разобраться.

премер: (мой скрипт)

Страница(1:(
PHP:
<a href="loadings.php?id=<?=$myrow['id']?>" title="скачать <?=$myrow['title']?>">СКАЧАТЬ</a>

Страница(2:(

PHP:
<?php 
include ("addition/bd.php"); /*Соединяемся с базой данных*/

if (isset($_GET['id'])) {$id = $_GET['id'];}

$result = mysql_query("SELECT * FROM content WHERE id='$id'",$db);
$myrow = mysql_fetch_array ($result); 

       /*Обновляем колонку скачиваний и прибовляем 1*/
$new_loadings = $myrow['loadings'] + 1;
$update = mysql_query ("UPDATE content SET loadings='$new_loadings' WHERE id='$id'",$db);
           /*конец*/
$url = $myrow ['reference'];   
 
  $URL="files/"."$url";
header("Location:$URL");
exit();
?>

и тут запускается проигрыватель.
 
Есть сайт на котором распологаются mp3 файлы, при нажатии чтобы скачать, запускается проигрыватель QuickTime и в браузере проигрывается этот файл, как сделать чтобы этого нпроисходило, а появлялось окно для сохранения файла,
Это нужно копать в сторону отдаваемых скриптом заголовков "header content-type"
 
PHP:
<?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;
}
?>

Заголовок header(«Content-Transfer-Encoding: binary»); очень важен для того, чтобы заставить браузер скачивать файл, а не отображать текстовое содержимое.

Подробнее здесь - Для просмотра ссылки Войди или Зарегистрируйся
 
Можете подсказать какой будет полный код 2-ой странице, а то я разобраться немогу, уже мозг кипит.

Выводит какуюто хрень, вся страница заполняется кракозябрами до бесканечности.
 
Пробуй так:

PHP:
<?php  
include ("addition/bd.php");  

if (isset($_GET['id'])) {$id = $_GET['id'];} 

$result = mysql_query("SELECT * FROM content WHERE id='$id'",$db); 
$myrow = mysql_fetch_array ($result);  

        
$new_loadings = $myrow['loadings'] + 1; 
$update = mysql_query ("UPDATE content SET loadings='$new_loadings' WHERE id='$id'",$db); 
            
$url = $myrow['reference'];    
$url = "files/".$url;

if (!is_file($url)) { die("404 File not found!"); }

$len = filesize($url);
$filename = basename($url);
header("Content-Type: audio/mpeg");
header("Content-Disposition: attachment; filename=".$filename.";"); 
header("Content-Length: ".$len);

@readfile($url);
?>
 
fredis69, скинь на форум ссылку на свой скрипт
 
Вот рабочий код,

PHP:
<?php   
include ("addition/bd.php"); if (isset($_GET['id'])) {$id = $_GET['id'];}  
$result = mysql_query("SELECT * FROM content WHERE id='$id'",$db);  
$myrow = mysql_fetch_array ($result);
$new_loadings = $myrow['loadings'] + 1;  
$update = mysql_query ("UPDATE content SET loadings='$new_loadings' WHERE id='$id'",$db);  
$url = $myrow['reference'];     
$url = "files/".$url; 
if (!is_file($url)) { die("404!"); } 
$len = filesize($url); 
$filename = basename($url); 
header("Content-Type: audio/mpeg"); 
header("Content-Disposition: attachment; filename=".$filename.";");  
header("Content-Length: ".$len); 
@readfile($url); 
?>
 
Вот рабочий код,
PHP:
<?php   
include ("addition/bd.php"); if (isset($_GET['id'])) {$id = $_GET['id'];}  
$result = mysql_query("SELECT * FROM content WHERE id='$id'",$db);  
$myrow = mysql_fetch_array ($result);
$new_loadings = $myrow['loadings'] + 1;  
$update = mysql_query ("UPDATE content SET loadings='$new_loadings' WHERE id='$id'",$db);  
$url = $myrow['reference'];     
$url = "files/".$url; 
if (!is_file($url)) { die("404!"); } 
$len = filesize($url); 
$filename = basename($url); 
header("Content-Type: audio/mpeg"); 
header("Content-Disposition: attachment; filename=".$filename.";");  
header("Content-Length: ".$len); 
@readfile($url); 
?>

большое спасибо всё работает отлично, даже лучше чем я ожидал, страница loadings.php даже не загружается в браузер, соответственно пользователю неизвестна прямая ссылка на файл, работает отлично
 
PHP:
if (isset($_GET['id'])) {$id = $_GET['id'];}  
$result = mysql_query("SELECT * FROM content WHERE id='$id'",$db);
Народ вы че прикалываетесь? Без валидации и обработки сразу в запрос к базе?
Ну ну...
 
PHP:
if (isset($_GET['id'])) {$id = $_GET['id'];}  
$result = mysql_query("SELECT * FROM content WHERE id='$id'",$db);
Народ вы че прикалываетесь? Без валидации и обработки сразу в запрос к базе?
Ну ну...

Ну подскажи как сделать правильно. Я неочень хорошо разбираюсь в защите.

Как надо сделать?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху