2011-10-03 21 views
9

tengo un mp3 en mi servidor (URL son sólo ejemplos):¿Cómo se puede apoyar la búsqueda de un mp3 cuando se regresa de un script php?

http://www.my-server.com/myaudio.mp3 

Tengo un script php en el servidor en:

http://www.my-server.com/testmp3.php 

que contiene el siguiente código (que llegué here):

<? 
$file = "myaudio.mp3"; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

¿Es esto todo lo que tenga que hacer para imitar el comportamiento de modo que tanto la solicitud se comportan de la misma manera y devolver la misma respuesta exacta? O hay algo que me estoy perdiendo.

Estoy usando un código de transmisión en iOS (no es relevante aquí) y ambas solicitudes transmiten la multa de audio pero no puedo buscar correctamente utilizando la solicitud de php, pero puedo hacerlo con la solicitud de mp3 directamente.

Así que sin entrar en detalles sobre la aplicación en sí, quería eliminar esta variable primero. ¿Hay algo que deba hacer para asegurarme de que, desde la perspectiva de otra aplicación, estas dos solicitudes devuelvan exactamente los mismos datos?

Gracias por cualquier aportación que pueda darme aquí.

actualización

Resulta que mi pregunta realmente debería haber leído "¿Cómo apoya la búsqueda de un mp3, al regresar de un script php?".

+0

Interesante pregunta . Podría ser una buena opción para _ [Code Review] (http://codereview.stackexchange.com/) _, ya que no hay un problema específico. –

+0

@MichaelJasper, la pregunta específica (como yo lo veo) es "¿Este código imita una solicitud directa por completo?". – jball

+0

Este pequeño script PHP no implementa completamente una solicitud HTTP y el manejo de repsonse. No puede esperar que maneje todas las solicitudes, como un servidor http completo. – hakre

Respuesta

1

Es probablemente mejor para manejar esto con una modificación .htaccess en lugar de algo de código PHP.
Aquí hay un link on htaccess para comenzar.

Si usted tiene un directorio completo de archivos .mp3 que desea aparecer como descargas en vez de jugar en el navegador, sólo tiene que habías modificar el archivo .htaccess en esa carpeta para incluir

AddType application/octet-stream .mp3 
+0

Esta no es realmente una buena manera de hacerlo. Hay muchas razones por las que puede querer devolver un MP3 con PHP, como leer los parámetros de una base de datos para buscar el archivo correcto. Sin embargo, al lanzar eso, cambiar el tipo a 'application/octet-stream' no es una forma apropiada de forzar una descarga. ¿Cómo se supone que el extremo receptor determina definitivamente el tipo? El método apropiado es establecer el encabezado content-disposition. – Brad

+0

Envía un encabezado '302 Movido temporalmente' para reenviarlos al archivo correcto. Ahora bien, si está buscando evitar que las personas compartan el enlace de descarga o que requieran autenticación para descargar, este no es el camino a seguir, pero para la mayoría de las situaciones, esto funcionaría bien. –

Cuestiones relacionadas