Guardar imagen en Base de datos o en disco del servidor ???

Iniciado por SpiderNet, 3 Octubre 2008, 22:13 PM

0 Miembros y 1 Visitante están viendo este tema.

SpiderNet

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!!!
Quieres un foro solo para principiantes
Visita  http://spidernet.forumotion.com

El miedo es libre, puedes sentirlo....

дٳŦ٭

Por optimización al servidor de bd te recomiendo en el hdd del server.

Suerte


Con sangre andaluza :)


Karman

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

SpiderNet

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!!!
Quieres un foro solo para principiantes
Visita  http://spidernet.forumotion.com

El miedo es libre, puedes sentirlo....

Karman

#4
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 (html4strict) [Seleccionar]

<form action="muy largo" method="post" name="agregarimagen" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="250000">
<input name="nombreimagen" type="file" accept="image/jpeg" size="70">
<p><input class="boton" name="agregar" value="Agregar" type="submit"></p>
</form>


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

PHP:
Código (php) [Seleccionar]

//Obtenemos datos del archivo enviado...
$imagen = $_FILES('nombreimagen');
if(!$imagen)
return ShowError("No se ha Encontrado la Imagen Solicitada.");
//Verificamos datos...
if(($imagen['tmp_name']="")||($imagen['name']=="")||(!$imagen['size']))
return ShowError("No se ha Especificado el Nombre de la Imagen.");
//Verificamos tamaño
if($imagen['size'] > 250000)
return ShowError("La Imagen es demasiado grande, por favor reduzca su tamaño.");
    //Verificamos Tipo...
    if(($imagen['type'] == 'image/jpeg')||($imagen['type'] == 'image/pjpeg')){
    //Comprobamos exista el archivo temporal en el servidor...
    //(NOTA: desconozco porqué no funciona $imagen['tmp_name'])
    if (is_uploaded_file($_FILES['nombreimagen']['tmp_name'])){
    $carpeta = "Imagenes".date("Y");
    //Si no existe la carpeta intentamos crearla...
    if ((!file_exists($carpeta))&&(!mkdir($carpeta,644)))
    return ShowError("No se ha podido encontrar/crear la carpeta destino.");
    //generamos nombre de archivo (no utilizaremos el enviado)
    $nombrearchivo="imgn".$numeroimagen.".jpg";
    $nuevaimagen = "$carpeta/$nombrearchivo";
    while(file_exists($nuevaimagen)){
    $nombrearchivo="imgn".(++$numeroimagen).".jpg";
    $nuevaimagen = "$carpeta/$nombrearchivo";
    }
    //Si todo Ocurrió Correctamente subimos la imagen
    //(NOTA: desconozco porqué no funciona $imagen['tmp_name'])
    if (!move_uploaded_file($_FILES['nombreimagen']['tmp_name'], $nuevaimagen))
  return ShowError("Lo siento. No se ha Podido Subir la Imagen.");
    }else
    return ShowError("No se ha encontrado el archivo temporal.<br/>Esto puede deberse a que el archivo enviado es demasiado grande.");
  }else
  return ShowError("Tipo de archivo incorrecto.");
//Acá vendría el código todo OK


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

SpiderNet

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!!!
Quieres un foro solo para principiantes
Visita  http://spidernet.forumotion.com

El miedo es libre, puedes sentirlo....

SpiderNet

Si en el formulario no tengo el ... action="ejecutar.php"

Donde le decimos que script va a recibir los datos?


Saludos!!!
Quieres un foro solo para principiantes
Visita  http://spidernet.forumotion.com

El miedo es libre, puedes sentirlo....

Karman

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

SpiderNet

#8
Cita de: Karman en  4 Octubre 2008, 05:31 AM
Código (html4strict) [Seleccionar]

<form action="muy largo" method="post" name="agregarimagen" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="250000">
<input name="nombreimagen" type="file" accept="image/jpeg" size="70">
<p><input class="boton" name="agregar" value="Agregar" type="submit"></p>
</form>

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???
Quieres un foro solo para principiantes
Visita  http://spidernet.forumotion.com

El miedo es libre, puedes sentirlo....

Karman

#9
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