Ejercicio 4 PHP

Curso PHP – Ejercicio 4 (Subir y validar archivo)

🛠️ Ejercicio 4: Subir un archivo con validación de tipo y tamaño

📌 Planteamiento:

Crea un formulario para subir un archivo.
En PHP valida lo siguiente:

  • ✅ Solo se permiten archivos de imagen (jpg, png, gif).
  • ✅ El tamaño máximo permitido es 1MB.
  • ✅ Mostrar mensajes claros de éxito o error.
  • ✅ Guardar el archivo en una carpeta llamada uploads/.
👉 Todo en un solo archivo PHP (asegúrate que la carpeta uploads/ exista y tenga permisos de escritura).

✅ Modelo de solución:

<?php
$mensaje = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (isset($_FILES["archivo"]) && $_FILES["archivo"]["error"] == 0) {
    $permitidos = ["image/jpeg", "image/png", "image/gif"];
    $maxTamano = 1 * 1024 * 1024; // 1MB

    $tipoArchivo = $_FILES["archivo"]["type"];
    $tamanoArchivo = $_FILES["archivo"]["size"];

    if (!in_array($tipoArchivo, $permitidos)) {
      $mensaje = "Error: Solo se permiten archivos JPG, PNG o GIF.";
    } elseif ($tamanoArchivo > $maxTamano) {
      $mensaje = "Error: El archivo excede el tamaño máximo de 1MB.";
    } else {
      $nombreArchivo = basename($_FILES["archivo"]["name"]);
      $rutaDestino = "uploads/" . $nombreArchivo;

      if (move_uploaded_file($_FILES["archivo"]["tmp_name"], $rutaDestino)) {
        $mensaje = "Archivo subido con éxito: $nombreArchivo";
      } else {
        $mensaje = "Error al mover el archivo.";
      }
    }
  } else {
    $mensaje = "Error: No se ha seleccionado un archivo válido.";
  }
}
?>

<form method="post" enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
  <label for="archivo">Selecciona un archivo de imagen (JPG, PNG, GIF):</label>
  <input type="file" name="archivo" id="archivo" required />

  <button type="submit">Subir archivo</button>
</form>

<?php if (!empty($mensaje)) : ?>
  <p><?php echo $mensaje; ?></p>
<?php endif; ?>
    

🎯 Claves de este ejercicio:

  • 📍 Manejo de formularios con enctype="multipart/form-data".
  • 📍 Validación del tipo MIME del archivo.
  • 📍 Control de tamaño máximo.
  • 📍 Uso de move_uploaded_file() para guardar el archivo.

No hay comentarios:

Publicar un comentario

Políticas de Privacidad