Я работаю над своим школьным проектом, и я пытаюсь вывести 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"); } ?>
Кто-нибудь может мне это объяснить? Это было бы потрясающе!
header('Content-Disposition: inline;filename="test.mp3"');
Это то, что вам не хватает в вашем заголовке () (у вас не было указателя «inline»). Content-Transfer-Encoding должен быть «двоичным», а не «chunked».
Изменить: используйте «встроенный», если вы хотите, чтобы он отображался в браузере (если есть возможности) или «вложение», если вы хотите принудительно загрузить.
вы можете попробовать заменить
header («Content-Transfer-Encoding: binary»);
линия с
header («Content-Transfer-Encoding: chunked»);
Ну, ответ был ушел, и это был не мой сценарий. Перед любым 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 () не получает двоичный контент.
Спасибо, ребята, определенно собираюсь дать вам большие пальцы вверх для блеска и довольно полезную информацию!