---
# System prepended metadata

title: '#Día 5, proyecto Bienes Raíces'
tags: [php]

---

# Día 5, proyecto Bienes Raíces: subir archivos en PHP

Como habrás supuesto cuando subimos archivos a la base de datos, no se suben realmente a la base de datos sino que se suben al servidor y en la bd se incluye una referencia al archivo. 
Primero revisamos el formulario ya que en la definición del formulario se debe añadir un enctype="multipart/form-data":
```
    <form class="formulario" method="POST" action="/admin/propiedades/crear.php" enctype="multipart/form-data">
```

Lee más información al respecto:
https://www.php.net/manual/es/features.file-upload.post-method.php


Recordemos que el input debe estar configurado como sigue:
```
 <label for="imagen">Imagen: </label>
            <input type="file" id="imagen" name="imagen" accept="image/jpeg, image/png">
```
Debemos ser conscientes de que los archivos no se pasan dentro de la superglobal $_POST sino dentro de $_FILES, lo tenemos que asignar en una variable (supón por lógica dónde debe ir este código):
 ```
   //Asignar files hacia una variable
    $imagen=$_FILES['imagen'];
```
Añadimos la validación:
```
 if (!$imagen['name']) {
        $errores[]="La imagen es obligatoria";
    }
```
Y también podemos añadir una validación del tamaño máximo del fichero:
```
 //validar la imagen por tamaño
    //medida máxima en kb
    $medida=100;
    if (($imagen['size']/1024)>$medida){
        $errores[]="Reduzca el tamaño de la imagen, debe ser menor a". $medida."Kb.";
    }
```
Ten en cuenta que por defecto PHP limita las imágenes subidas a un máximo de 2MB, investiga cómo cambiar este máximo. 

## Almacenando las imágenes en el servidor

Una vez comprobamos que no hay errores en los datos ya podemos subir el archivo a nuestro server, para ello creamos una carpeta para imágenes (si es que no existe ya):

```
//creamos la carpeta imágenes en la raíz del proyecto si es que no existe
$carpetaImagenes='../../imagenes';
if (!is_dir($carpetaImagenes)){
    mkdir($carpetaImagenes);
}
```
Puedes ver más funciones PHP relacionadas al sistema de ficheros aquí:
https://www.php.net/manual/es/ref.filesystem.php

Ahora vamos a guardar la imagen, ten en cuenta que en $_FILES existe un valor tmp_name que es el nombre del archivo temporal donde se va a subir nuestro fichero, debemos usar una función de manejo de ficheros(move_uploaded_file) para poner nuestro archivo en la carpeta definitiva:
```
//subir archivo
        move_uploaded_file($imagen['tmp_name'], $carpetaImagenes."/archivo.jpg");
```

Como ves aquí estamos utilizando siempre el mismo nombre de archivo por lo que se sobreescribirá el fichero cada vez. 
Investiga un método para que esto no pase. Veremos una posible solución en la clase del día 6. 

