Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: SpiderNet en 3 Octubre 2008, 22:13 pm



Título: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: SpiderNet en 3 Octubre 2008, 22:13 pm
Estoy haciendo una web donde los usuarios pueden subir imagenes, he buscado en la red y vi que pueden hacerse de dos formas, subiendolas a la base de datos o grabando solo e4l nombre en la base de datos y el nombre directo en eldisco del servidor.

Ahora bien que es lo mas recomendable y por que?

Si tienen esa información , por favor!!! les agradecería.


Saludos!!!


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: дٳŦ٭ en 4 Octubre 2008, 02:52 am
Por optimización al servidor de bd te recomiendo en el hdd del server.

Suerte


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: Karman en 4 Octubre 2008, 02:57 am
obviamente que en disco rígido... si está en db 1º ocupas espacio, y luego requieres un gran uso de memoria para el pasaje de la imagen de la db a la pag... (tiempo inútil)

S2


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: SpiderNet en 4 Octubre 2008, 05:00 am
Tendran alguna guia, algun bosquejo de como podría hacerlo???

Desconozco con que instrucciones PHP se sube un archivo, además como haría para que el nombre de la imagen sea unico. Ya que dos personas pueden tener archivos con el mismo nombre.


Saludos!!!


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: Karman en 4 Octubre 2008, 05:31 am
justamente... estoy haciendo eso para una página que me encomendaron y más o menos el código es el siguiente:
HTML:
Código
  1. <form action="muy largo" method="post" name="agregarimagen" enctype="multipart/form-data">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="250000">
  3. <input name="nombreimagen" type="file" accept="image/jpeg" size="70">
  4. <p><input class="boton" name="agregar" value="Agregar" type="submit"></p>
  5. </form>
  6.  

lo que no tienes que olvidar de esta parte es enctype="multipart/form-data"
accept es solo soportado por algunos exploradores

PHP:
Código
  1. //Obtenemos datos del archivo enviado...
  2. $imagen = $_FILES('nombreimagen');
  3. if(!$imagen)
  4. return ShowError("No se ha Encontrado la Imagen Solicitada.");
  5. //Verificamos datos...
  6. if(($imagen['tmp_name']="")||($imagen['name']=="")||(!$imagen['size']))
  7. return ShowError("No se ha Especificado el Nombre de la Imagen.");
  8. //Verificamos tamaño
  9. if($imagen['size'] > 250000)
  10. return ShowError("La Imagen es demasiado grande, por favor reduzca su tamaño.");
  11.    //Verificamos Tipo...
  12.    if(($imagen['type'] == 'image/jpeg')||($imagen['type'] == 'image/pjpeg')){
  13.     //Comprobamos exista el archivo temporal en el servidor...
  14.     //(NOTA: desconozco porqué no funciona $imagen['tmp_name'])
  15.    if (is_uploaded_file($_FILES['nombreimagen']['tmp_name'])){
  16.     $carpeta = "Imagenes".date("Y");
  17.     //Si no existe la carpeta intentamos crearla...
  18.     if ((!file_exists($carpeta))&&(!mkdir($carpeta,644)))
  19.     return ShowError("No se ha podido encontrar/crear la carpeta destino.");
  20.     //generamos nombre de archivo (no utilizaremos el enviado)
  21.     $nombrearchivo="imgn".$numeroimagen.".jpg";
  22.     $nuevaimagen = "$carpeta/$nombrearchivo";
  23.     while(file_exists($nuevaimagen)){
  24.     $nombrearchivo="imgn".(++$numeroimagen).".jpg";
  25.     $nuevaimagen = "$carpeta/$nombrearchivo";
  26.     }
  27.     //Si todo Ocurrió Correctamente subimos la imagen
  28.     //(NOTA: desconozco porqué no funciona $imagen['tmp_name'])
  29.     if (!move_uploaded_file($_FILES['nombreimagen']['tmp_name'], $nuevaimagen))
  30.   return ShowError("Lo siento. No se ha Podido Subir la Imagen.");
  31.    }else
  32.     return ShowError("No se ha encontrado el archivo temporal.<br/>Esto puede deberse a que el archivo enviado es demasiado grande.");
  33.   }else
  34.   return ShowError("Tipo de archivo incorrecto.");
  35. //Acá vendría el código todo OK
  36.  

Cave aclarar que algunas variables (cuando genero el nombre del archivo) las obtengo de la base de datos, (hago una referencia en base de datos para que sea más sencillo eliminarlas si no las necesito más), pero podrías obtenerlas por otros métodos...

PD: es para PHP 5, en otras versiones es distinto

S2


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: SpiderNet en 4 Octubre 2008, 22:06 pm
Precisamente yo trabajo con PHP5, lo tengo instalado conmo local y al subir mi web, será en un servidor con PHP5.

Voy a probar tu metodo y posteo aca mis resultados y dudas.


Gracias!!!


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: SpiderNet en 4 Octubre 2008, 22:35 pm
Si en el formulario no tengo el ... action="ejecutar.php"

Donde le decimos que script va a recibir los datos?


Saludos!!!


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: Karman en 5 Octubre 2008, 01:28 am
no entiendo... en action va la página que procesa el formulario... en el ejemplo puse "muy largo" porque copié de mi sitio el código y no iba a postear todo el código...

S2


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: SpiderNet en 5 Octubre 2008, 17:09 pm
Código
  1. <form action="muy largo" method="post" name="agregarimagen" enctype="multipart/form-data">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="250000">
  3. <input name="nombreimagen" type="file" accept="image/jpeg" size="70">
  4. <p><input class="boton" name="agregar" value="Agregar" type="submit"></p>
  5. </form>
  6.  

Con solo esta parte del codigo deberia subir mi archivo al directorio temporal del servidor cierto???

Tengo instalado Apache 2.0, PHP 5 en mi PC. Verifique el php.ini y tengo configurado el upload....
file_uploads = On
upload_tmp_dir = "C:\Servidor\WEB\uploads\"
upload_max_filesize = 2M

Ejecuto el codigo y reviso el directorio que le indique al php.ini y no aparece nada.

Me aparece el siguiente error

Warning: copy(uploads/araña.gif) [function.copy]: failed to open stream: No such file or directory in D:\Servidor\WEB\manejo_de_imagenes\upload\upload2\sube_archicvo.php on line 18
El archivo subio con exito

Esta es mi linea 18
      copy($HTTP_POST_FILES['archivo']['tmp_name'], "uploads/".$HTTP_POST_FILES['archivo']['name']);     


Al ejecutarlo la primera vez aparentemente no hace nada. Al ejecutarlo la segunda vez es que aparece el mensaje de error.

Que hago???


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: Karman en 5 Octubre 2008, 21:56 pm
no puedes usar copy... tienes que usar las funciones que te puse... ya que el archivo no es copiado con el mismo nombre y hay atributos de seguridad tb.... con le código que te pasé tendría que funcionarte bien...

utilizando el código que te pasé prueba colocar unos echos en los $imagen['tmp_name'], $imagen['name'], $imagen['size'] y fíjate donde puede estar el error...

S2


Título: Re: Guardar imagen en Base de datos o en disco del servidor ???
Publicado por: дٳŦ٭ en 6 Octubre 2008, 08:58 am
Usa move_uploaded_file.