2012-02-13 5 views
5

Estoy construyendo un sitio, y acabo de comenzar a desarrollar el back-end.Cómo almacenar archivos de imagen en el back-end de un sitio

El objetivo de mi sitio será mostrar imágenes a un visitante. Para fines de desarrollo, me gustaría probar todo primero antes de lanzarlo.

Me gustaría saber cuál es la mejor forma de almacenar estas imágenes. Acabo de configurar mi servidor Wamp y agregué un nuevo db con phpMyAdmin. Descubrí que puedo almacenar cada imagen directamente en la base de datos mySQL como un tipo de datos BLOB. ¿Pero es esta la mejor manera de hacerlo?

¡Gracias!

Respuesta

7

Esto ciertamente no es el camino a seguir. A continuación, deberá mantener el blob en la memoria en PHP antes de enviarlo al navegador.

Un mejor enfoque sería almacenar las imágenes como archivos en el sistema de archivos y simplemente almacenar el nombre de archivo en su base de datos. de esta forma, puede descargar toda la imagen que se sirve en el servidor web y nunca involucrar PHP en las solicitudes HTTP para el archivo.

5

Almacenamiento de archivos en la base de datos tiene dos ventajas principales:

  1. seguridad de las transacciones. Si el usuario edita su perfil (foto & fecha de nacimiento), ambos se guardan o ninguno en caso de una reversión/error.

  2. Solo un punto de respaldo. No te va a pasar que olvides hacer una copia de seguridad del directorio que contiene avatares de usuario.

Sin embargo, a causa de muchas trampas, no lo recomiendo, sobre todo, no usando PHP MySQL &. MySQL no es compatible con la transmisión, por lo que en el caso de un archivo grande, usarás todo tu RAM.

El sistema de archivos es, sin duda, la forma más rápida y natural. Tiene la menor sobrecarga y es la que menos recursos tiene.

Leer:

Storing a file in a database as opposed to the file system?

Storing Documents as Blobs in a Database - Any disadvantages?

0

Se pueden almacenar en el DB entonces manipular fácilmente la imagen. Por ejemplo, puede tomar una imagen original de DB y crear varias imágenes de caché (en disco) con diferentes tamaños (usando imagick) y mostrarlas en el sitio web. Si está utilizando DB, debe usar la carga diferida cuando tome imágenes (cargue el contenido solo si lo necesita) de lo contrario, mysql bloqueará su servidor. :)

Puede hacer un dir /cache/pictures/$id_$width_$height.jpg, y almacenarlos allí. Y crear una nueva imagen solo si $ id_ $ ancho_ $ alto no se encuentra.

0

Yo, personalmente, no recomendaría almacenar los archivos en la base de datos. Guardaría referencias a ubicaciones de los archivos para que puedan escalarse en el futuro si es necesario a través de espejos, etc.

Cuestiones relacionadas