working tag not php audio html5 mp3

tag - Configuración de Apache para servir PHP cuando se solicita un archivo MP3



html5 audio autoplay (4)

Estoy trabajando en una forma de servir archivos MP3 a través de PHP y después de un poco de ayuda formé el SO masivo, lo conseguí trabajando aquí

Sin embargo, ese ejemplo no parece funcionar cuando lo uso como fuente en una etiqueta de audio como esta

<html> <head> <title>Audio Tag Experiment</title> </head> <body> <audio id=''audio-element'' src="music/mp3.php" autoplay controls> Your browser does not support the audio element. </audio> </body> </html>

y aquí está el PHP

<?php $track = "lilly.mp3"; if(file_exists($track)) { header("Content-Transfer-Encoding: binary"); header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3"); header(''Content-length: '' . filesize($track)); header(''Content-Disposition: filename="lilly.mp3"''); header(''X-Pad: avoid browser bug''); Header(''Cache-Control: no-cache''); readfile($track); }else{ echo "no file"; }

Así que estoy pensando (y esta puede ser una muy mala idea, me dices) que podría configurar Apache para servir un archivo PHP cuando alguien solicita un .MP3.

Entonces tengo tres preguntas

  1. Esto funcionara
  2. Buena idea / mala idea?
  3. ¿Qué debería hacer? ¿Poner "AddType application / x-httpd-php .mp3" int él httpd conf hacerlo?

Hay algunos errores en tu código:

  • Un recurso solo puede tener un único valor de tipo de contenido . Entonces debe decidir qué tipo de medio quiere usar. Sugiero audio/mpeg .
  • Olvidó especificar la disposición en Content-Disposition . Si solo desea dar un nombre de archivo y no desea cambiar la disposición, use el valor predeterminado en inline .

El resto se ve bien. Pero también enviaría el código de estado 404 si no se puede encontrar el archivo.

$track = "lilly.mp3"; if (file_exists($track)) { header("Content-Type: audio/mpeg"); header(''Content-Length: '' . filesize($track)); header(''Content-Disposition: inline; filename="lilly.mp3"''); header(''X-Pad: avoid browser bug''); header(''Cache-Control: no-cache''); readfile($track); exit; } else { header($_SERVER[''SERVER_PROTOCOL''].'' 404 Not Found'', true, 404); echo "no file"; }


Simplemente puede hacerlo para que tenga una regla mod_rewrite para ejecutar cada solicitud de música / *. Mp3 a través de su archivo mp3.php.

Por ejemplo, algo como esto

RewriteEngine on RewriteRule ^/music/(.*/.mp3) /music/mp3.php?file=$1 [L]

mp3.php puede recoger el archivo solicitado desde $ _GET [''file''], pero si usa este enfoque, le recomiendo que revise el nombre del archivo, para asegurarse de que solo haga referencia a un archivo en el directorio deseado.

//ensure filename just uses alphanumerics and underscore if (preg_match(''/^[a-z0-9_]+/.mp3$/i'', $_GET[''file''])) { //check file exists and serve it $track=$_SERVER[''DOCUMENT_ROOT''].''/music/''.$_GET[''file'']; if(file_exists($track)) { header("Content-Type: audio/mpeg"); header(''Content-length: '' . filesize($track)); //insert any other required headers... //send data readfile($track); } else { //filename OK, but just not here header("HTTP/1.0 404 Not Found"); } } else { //bad request header("HTTP/1.0 400 Forbidden"); }



Este funciona para mí (en .htaccess):

<FilesMatch "mp3$"> SetHandler application/x-httpd-php5 </FilesMatch>