Выходной mp3 с php - PullRequest
       36

Выходной mp3 с php

5 голосов
/ 11 марта 2011

Я работаю над своим школьным проектом и пытаюсь вывести mp3-файл, используя PHP, но, очевидно, он просто выводит какой-то поврежденный файл, и я понятия не имею, почему.Я просмотрел всю сеть, чтобы найти решение, но нет.

<?php
$filename = 'audio/1/1.mp3';

if(file_exists($filename)) {
    header('Content-Type: audio/mpeg');
    header('Content-Disposition: filename="test.mp3"');
    header('Content-length: '.filesize($filename));
    header('Cache-Control: no-cache');
    header("Content-Transfer-Encoding: chunked"); 

    readfile($filename);
} else {
    header("HTTP/1.0 404 Not Found");
}
?>

Может кто-нибудь объяснить это мне?Это было бы просто потрясающе!

Ответы [ 3 ]

6 голосов
/ 11 марта 2011
header('Content-Disposition: inline;filename="test.mp3"');

Это то, что вам не хватает в заголовке () (у вас не было указано "inline").Content-Transfer-Encoding должен быть «двоичным», а не «chunked».

Редактировать: используйте «inline», если вы хотите, чтобы он отображался в браузере (если возможности есть), или «attachment», если хотитезаставить загрузку.

0 голосов
/ 15 марта 2011

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

<?php
//get stuff
if(empty($page->customHeader)): ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php print $page->title ?></title>
</head>

<body>
<div class="container">
    <div class="header">
    </div>

    <div class="content">        
        <?php print $page->content ?>
    </div>

    <div class="footer">
    </div>
</div>
</body>
</html>
<?php else:
    print $page->content;
endif; ?>

Для шаблонов я использую ob_get_contents (), поэтому в реальном шаблоне я отображаю / печатаю данные. По какой-то причине ob_get_contents () не получает это должным образом, так что именно здесь все пошло не так.

Теперь я определяю свои заголовки в массиве и путь к содержимому в другой переменной и вызываю это.

...
</html>
<?php else:
    foreach($page->customHeader as $header) {
        header($header, true);
    }

    readfile($page->headerContent);
endif; ?>

Короче говоря: ob_get_contents () не получает двоичный контент.

Спасибо, ребята, определенно собираюсь поблагодарить вас за работу и довольно полезную информацию!

0 голосов
/ 11 марта 2011

можете попробовать заменить

header("Content-Transfer-Encoding: binary");
строку на
header("Content-Transfer-Encoding: chunked"); 
...