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!!!
Por optimización al servidor de bd te recomiendo en el hdd del server.
Suerte
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
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!!!
justamente... estoy haciendo eso para una página que me encomendaron y más o menos el código es el siguiente:
HTML:
<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:
//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
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!!!
Si en el formulario no tengo el ... action="ejecutar.php"
Donde le decimos que script va a recibir los datos?
Saludos!!!
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
Cita de: Karman en 4 Octubre 2008, 05:31 AM
<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???
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
Usa move_uploaded_file.