Subiendo Audio

Quiero crear un formulario para subir archivos de audio a mi servidor y al mismo tiempo guardar una referencia en una tabla mysql.
1. Referencia MYSQL:
- Ruta (debe ser el nombre del archivo, ya que voy a reproducirlo senialando la ruta de la carpeta donde esta ubicado).
- Titulo (un titulo que el usuario decidirá para su archivo subido)
2. Archivo AUDIO:
- Nombre: quiero que el nombre del archivo sea el mismo que el titulo que el usuario ha introducido (pero supongo que deber ir separado por _). ¿Cómo hago el cambiado de nombre del archivo?
En realidad entiendo bien lo que necesito y lo que debo hacer, pero me cuesta hacer el código.

1 respuesta

Respuesta
1
Respondiendo a la primera pregunta el formulario es muy sencillo, de hecho es igual a cualquier otro formulario.
La ruta no es problema, ya que eres tú la que debe indicar la ruta donde debe guardarse el archivo. Así puedes definir la ruta en una variable:
$ruta_base = "contenido/musica"; (por ejemplo)
Y será la que guardes en la base de datos, de hecho si la ruta es siempre la misma no será necesario.
El nombre del archivo se guarda temporalmente en una carpeta y es mediante la función "move_uploaded_file()" donde especificas tú el nombre final y la ubicación, por lo que en la tabla solo guardaría (ademas de los datos de usuario y demás que necesites guardar) el titulo, la ruta (si los guardas en distintas carpetas) y el nombre del fichero.
Aquí tienes si controlas de inglés el manual sobre el file upload en php. Si no lo ves claro, aquí hay un ejemplo explicado de su uso y código de ejemplo en castellano (enlace).
La segunda pregunta es más sencilla. No te compliques, no necesitas que el nombre del fichero sea igual al nombre del titulo, y no te lo aconsejaría por diversas razones:
- Deberías controlar muy bien que se pone como titulo, que no se usen caracteres especiales, ni acentos, ni símbolos, etc. lo que limita mucho a la gente
- Y después revisar el nombre del titulo carácter por carácter para ver si son válidos y sustituir (eso es lo más sencillo) los espacios por guiones bajos, aunque no sería necesario.
Yo en tu lugar daría un nombre cualquiera al fichero, puede ser uno autonumérico, puede ser automático según fecha y hora de recepción, el nombre del usuario y un número que se incremente, etc. Te digo esto porque nunca vas a buscar el fichero en la base de datos por su nombre, si no por el titulo, o lo vas a listar po usuarios, etc, y en pantalla no tiene porque salir el nombre, solo el titulo. Así te permite que los usuarios pongan el titulo que quieran con todos los caracteres que se les antojen, exclamaciones, interrogaciones, etc.
Así:
- Fulanito mete un fichero llamado micancion.mp3 y su titulo es "¡¡¡La bomba!!!"
- Archivas: Nombre "Fulanito" Titulo "¡¡¡La bomba!!!" Fichero:
Pues "fulanito124" o "0111101204" (que sería diamesañohora) o simplemente un incremental automático "3457"
A la hora de buscar vas a buscar el fichero cuyo titulo es "¡¡¡La bomba!!!", la base te devuelve $fichero="fulanito124"; y tu creas la ruta a partir de ahí:
$ruta = $ruta_base . $fichero . ".mp3"
Ademas incrementas así la seguridad, ya que nadie puede acceder al fichero directamente, si ven que el nombre del fichero es igual al titulo se puede intentar acceder por FTP y descargar todo el contenido.
Un saludo,
kike
Digamos que quiero poner como titulo entonces el nombre del Autor y un numero ascendente.
¿Cómo haría eso? Incluyendo también el tema de los _.
Gracias
No metas lo guiones bajos, no los necesitas.
Crea la base así:
Id autonumérico
nombre_autor
titulo
nombre_fichero
El nombre del fichero sería:
- Busco el último ide introducido: $ultimo_id = (consulta a la base del último id) No consultes el número de elementos de la base, porque puedes borrar alguno y se repetiría el "id" en el nombre y si coincide con el mismo autor pisarías un fichero.
- Le sumo 1: $id = ++$ultimo_id:
- $nombre_fichero=$autor . $id;
Si tienes que guardar la ruta completa pues sería simplemente anadiendo la ruta antes del nombre del fichero.
Pero si quieres meter lo guiones bajos solo tienes que poner:
$nombre_fichero=$autor . "_" . $id;
Bien,
Pero si el nombre del autor es: Carlos Perez, se me quedaría el nombre del archivo como:
- Carlos Perez001.mp3 (me refiero al _ para evitar el espacio entre Carlos y Perez.
Por otro lado, ¿hay alguna forma de recoger el tiempo de duración de la canción?
Ya no te molesto más!
Mil Gracias!
No es molestia, el día que me moleste me doy de baja, mientras tanto todas las preguntas son bien recibidas.
Yo eliminaría los espacios en blanco dejando solo carlosperez001.mp3, pero pensé que eran nombre de usuario lo que utilizabas, si es el nombre completo volvemos a lo mismo, que pueden poner "Carlos Pérez) y no te vale como nombre de archivo. Así pues otra solución:
Tabla uno (autores):
id_autor (autonumerica)
Resto de campos de datos del autor
Tabla dos (canciones):
id_canción
id_autor
Titulo
Ruta
Caratula
Comentario
Así nombre del mp3 o ruta: $nombre_mp3 = ++$ultimo_id_cancion . ".mp3";
No sería necesario el id_autor porque los id_canción las harían únicas, cuando quieres listar todas sus canciones (de un autor), haces la búsqueda solo en la tabla canciones de aquellos ficheros cuyos id_autor coincidan con el del autor. Así además ahorras espacio, no se repite el nombre del autor y el nombre de la canción almacenado es muy reducido.
Respecto a el tiempo de duración, se que se tiene que calcular en función del tamaño y el bitrate, pero no sé como hacerlo. Hay un script php muy utilizado que te permite extraer la información e incluso modificarla, para antes de guardar el mp3 si no tiene los tags poder ponérselos tú (autor, titulo, genero, album, año), se llama getid3(), no sé como funciona, pero en la página encuentras ejemplos y comentarios:
http://www.getid3.org

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas