Output mp3 with php

后端 未结 3 1954
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-10 07:02

I\'m working on my school project and I\'m trying to output a mp3 file using PHP but apparently it just outputs some corrupt file and I have no clue why. I browsed the entir

相关标签:
3条回答
  • 2020-12-10 07:40

    can you try replace

    header("Content-Transfer-Encoding: binary");
    line with
    header("Content-Transfer-Encoding: chunked"); 

    0 讨论(0)
  • 2020-12-10 07:43

    Well the answer was way off and it wasn't my script. Before any HTML tag I load all content, if custom headers are defined I only show the content (retrieved from templates)

    <?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; ?>
    

    For the templates i use ob_get_contents(), so in the actual template I echo/print data. For some reason ob_get_contents() doesn't fetch that properly so that's where it went wrong.

    Now I define my headers in an array and the path of the content in another variable and call that.

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

    Long story short: ob_get_contents() doesn't get binary content.

    Thanks guys, definately going to give you thumbs up for the efford and rather useful information!

    0 讨论(0)
  • 2020-12-10 07:53
    header('Content-Disposition: inline;filename="test.mp3"');
    

    That's what you're missing in your header() (you had no "inline" specified). Content-Transfer-Encoding should be "binary", not "chunked".

    Edit: use "inline" if you want it to be displayed within the browser (if capabilities exist) or "attachment" if you want to force download.

    0 讨论(0)
提交回复
热议问题