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 ^_^