Foros del Web » Programando para Internet » PHP »

guardar imagenes en la base de datos

Estas en el tema de guardar imagenes en la base de datos en el foro de PHP en Foros del Web. Buenas!! Me gustaria saber como puedo guardar una imagen en la base de datos, es decir, que el usuario seleccione una imagen y aparte de ...
  #1 (permalink)  
Antiguo 10/07/2006, 06:33
Iru
 
Fecha de Ingreso: junio-2006
Mensajes: 10
Antigüedad: 11 años, 5 meses
Puntos: 0
Sonrisa guardar imagenes en la base de datos

Buenas!!
Me gustaria saber como puedo guardar una imagen en la base de datos, es decir, que el usuario seleccione una imagen y aparte de subirla al servidor q se guarde tambien la imagen en la base de datos. Lo de subir la foto al servidor ya lo tengo hecho pero me falta guardarla en la base de datos y no se como.

Muchas gracias.
  #2 (permalink)  
Antiguo 10/07/2006, 07:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En la BBDD puedes guardar simplemente el nombre de la imagen que has subido.

El nombre de la imagen que subes lo tienes en $_FILES['archivo']['name'] .. ese es el que debes tomar para crear tu registro en tu BBDD y así almacenarlo ...

A la hora de acceder a tu archivo .. tomas el nombre del archivo de tu BBDD (previa consulta SQL típica) y lo usas como corresponda (incluido si lo requieres la ruta absoluta de donde estén esas imagenes).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 11/07/2006, 03:41
Iru
 
Fecha de Ingreso: junio-2006
Mensajes: 10
Antigüedad: 11 años, 5 meses
Puntos: 0
Sonrisa

Pero la imagen en si no la puedo guardar en la base de datos?
Esque mi jefe no quiere que la imagen se suba al servidor, quiere que se guarde directamente en la base de datos, para así evitar problemas con los permisos....
Muchas gracias.
  #4 (permalink)  
Antiguo 11/07/2006, 04:24
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Evitaras problemas con los permisos, pero tendras problemas con el tamaño de la base de datos. Dile a tu jefe que no es una solucion valida... te lo digo por experiencia propia, jeje.

Teniamos una base de datos en la que se insertaban los archivos en la base de datos directamente, y llego un momento en el que era imposible gestionarla debido al gran tamaño que ocupaba. Ten en cuenta que si, por ejemplo, quieres meter un archivo que ocupe 5 megas, el tamaño de la base de datos aumenta tambien 5 megas.

Si aun asi quieres hacerlo, tienes que meter las imagenes en un campo del tipo BLOB y con la funcion de MySQL LOAD_FILE. Yo no te puedo ayudar mucho mas porque no lo he usado nunca
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #5 (permalink)  
Antiguo 11/07/2006, 04:29
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
Hola, en las faqs hay algo q se le parece... Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #6 (permalink)  
Antiguo 11/07/2006, 04:29
djb
 
Fecha de Ingreso: noviembre-2005
Ubicación: España
Mensajes: 22
Antigüedad: 12 años, 1 mes
Puntos: 0
Hola!

Estoy de acuerdo con oskarL. Además del inconveniente del aumento de tamaño (de una forma considerable) puedes tener problemas con las versiones de PHP y de la base de datos (tb por experiencia). tenía una aplicación que guardaba las imágenes en la base de datos y funcionaba perfectamente en mi PC. Pero a la hora de subirla al servidor no me mostraba las imágenes a través de los "BLOB".

Yo te recomiendo que subas el archivo y guardes el nombre en la base de datos, como bien ha dicho Cluster.

Espero haberte ayudado. Un saludo
  #7 (permalink)  
Antiguo 11/07/2006, 05:16
Iru
 
Fecha de Ingreso: junio-2006
Mensajes: 10
Antigüedad: 11 años, 5 meses
Puntos: 0
vale, entonces si no las guardo en la base de datos que puedo hacer para no tener problemas con los permisos?q puedo hacer para que no todo el mundo pueda borrar el contenido de las carpetas donde estan las imagenes?
  #8 (permalink)  
Antiguo 11/07/2006, 05:25
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
no se entiende bien el problema de los permisos... da detalles de que es lo que tienes, como lo haces, y donde encuentras el problema.

Acaso todo el mundo puede acceder a la carpeta en donde guardaras los archivos y borrarlos o que?
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.

Última edición por oskarL; 11/07/2006 a las 07:10
  #9 (permalink)  
Antiguo 11/07/2006, 05:44
Iru
 
Fecha de Ingreso: junio-2006
Mensajes: 10
Antigüedad: 11 años, 5 meses
Puntos: 0
A ver, esq n se como explicarme bien, así q se me a ocurrido q igual si puedo cambiar el usuario con el que e guardan las imagenes en la carpeta podría solucionarlo, lo q pasa es q la instruccion de php q e encontrado solo vale para cuando se es administrador y como se supone q se kiere combiar en tiempo de ejecución el usuario n es el administrador, sino que es el usuario web x defecto.
Vamos la idea es q cuando se suben las imagenes no se guarden con el usuario web que hay por defecto.
No se si se me entiendo lo ue intento preguntar ahora, pero esque es un poco lío.
Muchas gracias
  #10 (permalink)  
Antiguo 11/07/2006, 07:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Iru
A ver, esq n se como explicarme bien, así q se me a ocurrido q igual si puedo cambiar el usuario con el que e guardan las imagenes en la carpeta podría solucionarlo, lo q pasa es q la instruccion de php q e encontrado solo vale para cuando se es administrador y como se supone q se kiere combiar en tiempo de ejecución el usuario n es el administrador, sino que es el usuario web x defecto.
Vamos la idea es q cuando se suben las imagenes no se guarden con el usuario web que hay por defecto.
No se si se me entiendo lo ue intento preguntar ahora, pero esque es un poco lío.
Muchas gracias
Si mantienes tus archivos en el servidor como archivos .. el tema del acceso a esos archivos debería ser gestionado por tu aplicación PHP .. es esa aplicación PHP la que gestionará usuarios y los permisos sobre tus archivos.

Si a su vez ese servidor por otros médios: FTP, SSH .. Shell directo .. etc hay más usuarios rondando por ese servidor .. tendrás que proteger ese directorio a nivel de gestión de usuarios de ese S.O. (no sé si usas Linux o Windows) .. En principio recuerda que PHP sería el único permitido para acceder a esos archivos .. así que puedes dejar los permisos de esos directorios/archivos para que sólo los acceda el usuario que usa PHP al ejecutarse (si está bajo Apache suele ser ese usuario .. o el que use Apache como servidor HTTP).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 11/07/2006, 07:57
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
mi foro vbulletin lo guarda todo en la base de datos y va por unos 200 megas, esto es malo?
  #12 (permalink)  
Antiguo 11/07/2006, 07:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por oskarL
Evitaras problemas con los permisos, pero tendras problemas con el tamaño de la base de datos. Dile a tu jefe que no es una solucion valida... te lo digo por experiencia propia, jeje.

Teniamos una base de datos en la que se insertaban los archivos en la base de datos directamente, y llego un momento en el que era imposible gestionarla debido al gran tamaño que ocupaba. Ten en cuenta que si, por ejemplo, quieres meter un archivo que ocupe 5 megas, el tamaño de la base de datos aumenta tambien 5 megas.

Si aun asi quieres hacerlo, tienes que meter las imagenes en un campo del tipo BLOB y con la funcion de MySQL LOAD_FILE. Yo no te puedo ayudar mucho mas porque no lo he usado nunca
Yo suelo ser "imparcial" .. hay que exponer los "pro's" y "contras" de ambos métodos para gestionar archivos sobre una "BBDD".

Por ejemplo .. un tema de gestión de permisos sobre los archivos/protección y generación de respaldos/backups rápidos y compactos (hablo de "datos" como así lo entenderá la aplicación sean "archivos binarios" o de "texto plano") .. la opción de gestionar los datos como "binarios" sobre la BBDD suele ser la mejor opción. También se hace necesario usar esta técnica cuando esos datos "binarios" han de ser accedidos por otros lenguajes -no PHP- .. por ejemplo el caso típico donde tenemos interface PHP y "visual Basic" para meter "mano" a los datos indistintamente. Por supuesto este método tiene sus "contra" que ya los han expuesto.

Pero .. como "técnica" que es... si bien nos estamos limitando a un motor de BBDD concreto: Mysql .. tal vez otro motor de BBDD sea el más idoneo para gestionar grandes cantidades de datos por registro/campo (Oracle, MS SQL Server? .. PostgreSQL .. etc).

Aquí lo que sucede es que si nos "centramos" en que estamos desarrollando aplicaciones eminetemente "web" .. donde no hay previsión de acceso de esos datos por otros lenguajes/médios .. y que nos forzamos a usar "Mysql" como BBDD .. en ese caso suele ser más eficiente direccionar los archivos al sistema de archivos del servidor y almacenar o gestionar en tus BBDD el dato del "nombre del archivo" sólo.

En resumen .. no hay sistema "malo" o ineficiente .. hay que ver ante que tipo de proyecto y requerimientos estamos para ver que opción nos vendría mejor.

(Y eso que yo hice el manual mencionado: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario) pero sin embargo no me "caso" con ningún método por defecto .. siempre evaluo el proyecto a aplicar uno un otro método).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 11/07/2006, 08:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por djb
Hola!

Estoy de acuerdo con oskarL. Además del inconveniente del aumento de tamaño (de una forma considerable) puedes tener problemas con las versiones de PHP y de la base de datos (tb por experiencia). tenía una aplicación que guardaba las imágenes en la base de datos y funcionaba perfectamente en mi PC. Pero a la hora de subirla al servidor no me mostraba las imágenes a través de los "BLOB".

Yo te recomiendo que subas el archivo y guardes el nombre en la base de datos, como bien ha dicho Cluster.

Espero haberte ayudado. Un saludo
Ese sería tu problema puntual .. te aseguro que la técnica en general funciona (y que si se evalua tu problema seguro que de una forma u otra tendrá solución) .. No sería "justificación" que tal o cual código no te funcione para desechar una opción como la que se está discutiendo vs otra alternativa.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 11/07/2006, 08:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por escan_0
mi foro vbulletin lo guarda todo en la base de datos y va por unos 200 megas, esto es malo?
Estos foros "pensan" mucho más (y usan vBulletin también) .. El problema es de "recursos de tu servidor" .. En forosdelweb.com ya se ha cambiado de proveedor y de tipo de servicio várias veces (ahora estamos en un servidor -dedicado- por completo a este sitio ...).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 11/07/2006, 08:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Iru
A ver, esq n se como explicarme bien, así q se me a ocurrido q igual si puedo cambiar el usuario con el que e guardan las imagenes en la carpeta podría solucionarlo, lo q pasa es q la instruccion de php q e encontrado solo vale para cuando se es administrador y como se supone q se kiere combiar en tiempo de ejecución el usuario n es el administrador, sino que es el usuario web x defecto.
Vamos la idea es q cuando se suben las imagenes no se guarden con el usuario web que hay por defecto.
No se si se me entiendo lo ue intento preguntar ahora, pero esque es un poco lío.
Muchas gracias
Cuando subes archivos al servidor por HTTP (bajo PHP) todo queda bajo el usuario que corre PHP (o Apache).

Tienes funciones a nivel de S.O. para cambiar permisos y propietarios a los archivos (depende del S.O. que uses .. no lo especificas) .. Esa ejecución de ese tipo de comandos normalmente requiere de permisos tipo "root" para ejecutarlos y ejecutarlos bajo PHP con funciones tipo exec() y afines (previamente habilitado SUDO o similar para poderte cambiar de usuario al "root" en tiempo de ejecución, ejecutar tu comando y salir de dicho usuario al que tenía ...).

Vuelvo a preguntar:
Realmente esos archivos van a poder se accedidos por "SSH" (shell) u otros médios en el servidor por otros usuarios del servidor (no hablo de "usuarios de tu aplicación" .. eso es PHP y tus scripts lo que lo definiran y gestionaran).

No sé si nos entendemos .. pero creo que hay un pequeño error de conceptos entre usuarios del S.O. (que afectan por ejemplo al sistema de archivos de ese servidor) y los "usuarios" que tu aplicación PHP podría "crear" (digamos para tu S.O. en forma "virtual") ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:03.