Subir imágenes mediante PHP
Fecha: 10-ene-2010 | Autor: Marcelo.
Guardado en: Códigos, Tutoriales PHP
Un lector (cesarin) me había sugerido hace algún tiempo, que tratara el tema de “Cómo subir imágenes al servidor y guardar el nombre en una base de datos“, y para ello voy a redactar este breve tutorial sobre Cómo subir imágenes en PHP y guardar el nombre en una BBDD.
Para este mini-manual necesitamos poseer nociones básicas de PHP así como conectar a una BBDD e interactuar con ella.
Para crear nuestro uploader en PHP, necesitaremos 3 cosas:
- 1 archivo HTML que contenga el formulario que solicitará la imagen.
- 1 archivo PHP que procesará la subida de la imagen.
- La base de datos que guardará el nombre de las imágenes que subamos.
El archivo HTML debe contener un formulario con 2 campos un input type=”file” que será el selector de la imagen y un input type=”submit” que será el botón que enviará el formulario. Además debemos tener en cuenta que al enviar imágenes en un formulario debemos agregar enctype=”multipart/form-data” dentro de la tag <form>
Código del archivo formulario.html:
1 2 3 4 5 6 | <form action="procesar.php" enctype="multipart/form-data" method="post">
<label for="imagen">Imagen:</label>
<input id="imagen" name="imagen" size="30" type="file" />
<input name="submit" type="submit" value="Guardar" />
</form> |
El PHP que lo procese hará 3 cosas:
- Recibir los datos de la imagen mediante $_FILES.
- Guardará la imagen en la ruta que le indiquemos (el directorio debe tener permisos de escritura [CHMOD 0777]).
- Guardar el nombre de la imagen en la BBDD que definamos.
Código para subir la imagen (primera parte de procesar.php):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php // Datos de conexión a configurar $user = "usuario_bbdd"; $pass = "clave_bbdd"; $bbdd = "nombre_bbdd"; // Ruta donde se guardarán las imágenes $directorio = $_SERVER['DOCUMENT_ROOT'].'/uploads/'; // Conecto a la BBDD $dbh = mysql_connect("localhost", $user, $pass); $db = mysql_select_db($bbdd); // Recibo los datos de la imagen $nombre = $_FILES['imagen']['name']; $tipo = $_FILES['imagen']['type']; $tamano = $_FILES['imagen']['size']; // Muevo la imagen desde su ubicación // temporal al directorio definitivo move_uploaded_file($_FILES['imagen']['tmp_name'],$directorio.$nombre); ?> |
Ahí ya deberíamos tener nuestra imagen subida en el sitio indicado, ahora debemos guardar la variable $nombre en nuestra base de datos previamente creada. Para este ejemplo usaremos una bbdd que simplemente guardará el valor del nombre de la imagen y un id autonumerico » ID [INT(9)] | nombre_archivo – [VARCHAR(255)].
De modo que agregamos en procesar.php las siguientes líneas:
1 2 3 4 5 6 | // Guardamos en la BBDD $sql = "INSERT into TABLAIMAGENES (nombre_archivo) values ('$nombre')"; $resultado = mysql_query($sql); // Por si queremos la ID asignada a la imagen $id = mysql_insert_id(); |
Con esto debería bastar para poder guardar nuestras imágenes en una carpeta que decidamos y además guardar la referencia al nombre de archivo en la base de datos.
Luego para mostrar las imágenes simplemente las llamaras por el nombre en la carpeta /uploads/ o cualquier otra que hayas definido en tu caso.
Si tienes cualquier duda, o hay algo que no has entendido, puedes dejar tu comentario consultando, prometo intentar ayudarte ;)
Luis Toscano
19. feb, 2010
actualizemos el $HTTP_POST_FILES por $_FILES ya que el anterior ya ha sido descontinuado y puede ser un fail en tu desarrollo saludos
Marcelo
19. feb, 2010
Gracias Luis, tienes toda la razón, gracias por el comentario, ya procedo a corregirlo en el código del post ;)
Saludos!
Gerald
06. may, 2010
Esto serviria para crear un hosting de imagenes como http://www.tinypic.com o imageshack, photobucket, etc ?
Luis Toscano
08. may, 2010
sip con eso y le agregas una que otra mejora y listo
Francisco Machado
08. jun, 2010
Hola Marcelo, muy buena explicación, Me gusto mucho el diseño de la pagina, no te enojes si te copio alguna idea para cuando haga la mia. Saludos y a meter tecla.
Oscar
10. jun, 2010
hola Marcelo:
quiero comentarte cual es mi problema, un cliente me ha pedido hacer un sitio en el que sus clientes puedan subir fotos datos, telefono etc desde su computadora. Al sitio de mi cliente por medio de un formulario para mostrarlas. No se nada de php, pero necesitaria un script que me pueda ayudar.
Espero haber sido claro, desde ya muchas gracias
Marcelo
10. jun, 2010
Oscar, todo bien, pero me sorprende que alguien que “no sabe nada de php” (como tu mismo has dicho), acepte un proyecto de desarrollo que incluye (y mucho) PHP…
Aparte piensa, que si hubiera un script ya hecho, con lo que necesitas… para que te pagarían? o para qué cobrarías si simplemente tomarás algo ya hecho por otra persona y lo pondras en un servidor?
Francisco, gracias por tus comentarios, y claro que puedes tomar ideas ;) y si algo te es de utilidad se agradece que difundas la web… aunque no es para nada obligación ^_^
joaquin
30. sep, 2010
Primero que nada muy bueno este codigo funciona impecable..
Mi duda es la siguiente ya que lo eh intentado y no puedo..
Como hacer para en el mismo formulario agregar otros para ingresar textos y que esten en la misma BD o en diferente, Pero que luego puedas imprimir en pantalla la imagen y los demas textos.
Espero se entienda.
Salu2..
leonardo
21. oct, 2010
Hola, que tal, te pregunto, como se puede hacer para subir un archivo “x” ( documento o imagen ) pero que a la ves se muestre en una pagina “x” que ese mismo se pueda descargar por otras personas?, bueno mandame un mail lo antes posible
estamos en contacto.
saludos
axl
23. oct, 2010
Puedes completar este buen código????
Porfavor muestranos como mostrar mediante php las imagenes ya guardadas.
Muchas gracias
Antonio
13. nov, 2010
Hola,
Tengo un formulario el cual da opcion para subir 6 imagenes y funciona correctamente, pero tengo dos dudas, si no se agrega ninguna imagen y se envia el formulario, ¿Como puedo hacer para que aparezca en el lugar de la imagen, una por defecto? y la siguiente pregunta. Si subo una imagen, una vez publicada, ¿Como puedo hacer para que cuando el usuario pase el raton sobre la imagen, la imagen se agrande?.
Un saludo y muchas gracias.
danger_cris
14. nov, 2010
Muy buen aporte gracias me sacaste de un gran apuro
pepe
06. dic, 2010
Muy buenas
Tengo una duda sobre el codico que aportas, y es que si es seguro para el servidor que el cliente pueda subir imagenes, daria el caso de que cambien la extension a .jpg, .gif..etc para poder subir algo peligroso al servidor, y el codigo de arriba puede prevenir los archivos mal intecionados?
RAy
09. mar, 2011
marcelo para mostrarlas solo debes general una consulta de TABLAIMAGENES , solo mostrar sin procesar su contenid?
Diego
10. mar, 2011
Hola doy de Costa Rica, muchas gracias por el post, me sirvió de mucho…
Marcelo
30. may, 2011
Para quienes consultan como mostrar luego las imágenes, bastaría con hacer un SELECT a la tabla TABLAIMAGENES, lo cuál nos daría el nombre de archivo, y luego le concatenaríamos la ruta en la que están guardadas las mismas ;)
Lalo
15. jun, 2011
puedo subir una foto, guargarla en donde se guardan mis archivos php? para ser jalada desde ahi(por ejemplo con el apache) y si es necesario ser usada por un archivo php, por ejemplo para mostrarse en pantalla?
Pedro69
12. jul, 2011
Saludos y gracias por el tutorail, Os vais a reir de mi…. he conseguido todo lo dificil del tutorial y me falta lo mas sencillo.
He realizado tu tutorial paso por paso y para mi asombro ha funcionado todo muy bien hasta la base de datos…. pues bien, la foto me sale reflejada en la base de datos para mi asombro jajajajaja pero no consigo localizarla fisicamente en ninguna de las carpetas del host. En fin saludos y gracias por todo.
ags88
28. jul, 2011
hola necesito tu ayuda estoy creando un sistema que permita al asuario poder subir imagenes y mostrarlas en pantalla todo eso con php y mysql puedes ayudarme porfavor.
Fabiola
05. ago, 2011
Marcelo este codigo me sirve para luego leer de la base de datos las imagenes guardadas? por que me guarda el nombre , no la ruta, como lo haria para luego mostrar las imagenes guardadas en el servidor leyendo la ruta?
Gracias!
Yohelvis
16. ago, 2011
Amigo me funcionó de maravilla, sin embargo soy nuevo en esto y me gustaría hacer que también se generara un thumbnail de un ancho y alto especifico, que sería necesario agregar al script para lograrlo?
Gracias de antemano y felicitaciones.
Anika
23. ago, 2011
Gracias por el aporte!! Me salvaste la vida!! ;)
pablo
13. oct, 2011
Muchas gracias,
cómo se haría lo que hace miheineken, por ejemplo. Que saliese la imagen en un lugar determinado (dentro de otra)
Un saludo
Daniel
15. oct, 2011
Estaba buscando esto, si funciono gracias mil gracias.