Cargar múltiples archivos con PHP

Cargar múltiples archivos con PHP

Cargar múltiples archivos con PHP. De manera muy rápida explicaremos la forma de cargar varios archivos con un solo formulario usando HTML, PHP y CSS. Los ficheros a cargar pueden ser imágenes, documentos de texto y/o Audio y video. Sin embargo, debemos de verificar cual es la cantidad máxima de carga que nos permite subir el servidor.

Índice
  1. Cargar múltiples archivos con PHP
    1. Requisitos para el sistema (Cargar múltiples archivos):
    2. El resultado del formulario es el siguiente:
    3. Resultado si lo ejecutamos en el navegador.

Cargar múltiples archivos con PHP

¿Se podría cargar múltiples archivos en un mismo formulario?

Si se puede y para dar solución a esta incógnita es que nos decidimos a crear este articulo para despejar sus dudas.

Requisitos para el sistema (Cargar múltiples archivos):

  1. Servidor local
  2. PHP como lenguaje de programación
  3. Bootstrap (CSS) y jQuery.

Revisaremos nuestro formulario como punto número uno (1). Tenemos que declarar obligatoriamente el atributo llamada (enctype=”multipart/form-data") en la etiqueta FORM. Sin embargo, sin este atributo será imposible subir cualquier fichero al servidor.

Ahora datos a tener en cuenta, el atributo "enctype" sólo puede utilizarse cuando declaramos al método  "post".

El resultado del formulario es el siguiente:

index.php

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Capturar pantalla del sitio web desde URL PHP</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.2.1.min.js" ></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script>
<style type="text/css">
* {
	font-family:Segoe, "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif
}
.main {
	margin:auto;
	border:1px solid #7C7A7A;
	width:70%;
	text-align:left;
	padding:30px;
	background:#85c587
}
input[type=submit] {
	background:#6ca16e;
	width:100%;
	padding:5px 15px;
	background:#ccc;
	cursor:pointer;
	font-size:16px;
}
input[type=text] {
	width:40%;
	padding:5px 15px;
	height:25px;
	font-size:16px;
}
.form-control {
	padding: 0px 0px;
}
</style>
</head>
<body bgcolor="#bed7c0">
<br>
<div class="main">
  <h1>Cargar múltiples archivos PHP</h1>
  <div class="panel panel-primary">
    <div class="panel-body">
      <form name="MiForm" id="MiForm" method="post" action="cargar.php" enctype="multipart/form-data">
        <h4 class="text-center">Cargar Múltiple Archivos</h4>
        <div class="form-group">
          <label class="col-sm-2 control-label">Archivos</label>
          <div class="col-sm-8">
            <input type="file" class="form-control" id="miarchivo[]" name="miarchivo[]" multiple="">
          </div>
          <button type="submit" class="btn btn-primary">Cargar Multiple</button>
        </div>
      </form>
    </div>
  </div>
</div>
</body>
</html>

Resultado si lo ejecutamos en el navegador.

Cargar múltiples archivos e imagenes con PHP
Cargar múltiples archivos e imagenes con PHP

Listo ya tenemos nuestro formulario y tenemos que presionar el botón Cargar Múltiple y este enviara la información al script cargar.php.

cargar.php

<?php
	foreach($_FILES["miarchivo"]['tmp_name'] as $key => $tmp_name)
	{
		//condicional si el fuchero existe
		if($_FILES["miarchivo"]["name"][$key]) {
			// Nombres de archivos de temporales
			$archivonombre = $_FILES["miarchivo"]["name"][$key]; 
			$fuente = $_FILES["miarchivo"]["tmp_name"][$key]; 
			
			$carpeta = 'archivos/'; //Declaramos el nombre de la carpeta que guardara los archivos
			
			if(!file_exists($carpeta)){
				mkdir($carpeta, 0777) or die("Hubo un error al crear el directorio de almacenamiento");	
			}
			
			$dir=opendir($carpeta);
			$target_path = $carpeta.'/'.$archivonombre; //indicamos la ruta de destino de los archivos
			
	
			if(move_uploaded_file($fuente, $target_path)) {	
				echo "Los archivos $archivonombre se han cargado de forma correcta.<br>";
				} else {	
				echo "Se ha producido un error, por favor revise los archivos e intentelo de nuevo.<br>";
			}
			closedir($dir); //Cerramos la conexion con la carpeta destino
		}
	}
?>

Resultado al subir ficheros

Multiples ficheros PHP
Multiples ficheros PHP

Veamos una pequeña diferencia para cargar ficheros al servidor

Los input por lo general utilizamos "$_POST " o "GET"para recuperar el valor del elemento, para este ejemplo lo reemplazaremos con $_FILES.

El código cargar los archivo a la carpeta de destino especificada, en este ejemplo "archivos".

Cargar múltiples archivos con PHP
Cargar múltiples archivos con PHP

Descargar código fuente

 

Datatables Dropdown PDO, ServerSide, Responsiva

ServerSide
Responsiva adaptable
Opciones de exportación Dropdown
Mensajes usando SweetAlert2
Acciones (Editar, Agregar, Ver, Eliminar)

  Importar datos de Excel a MySQL con php

Si quieres conocer otros artículos parecidos a Cargar múltiples archivos con PHP puedes visitar la categoría ¿Qué es PHP y cómo funciona?.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

    17 Comentarios

  1. Carlos Muñoz dice:

    Me funciona muy bien en la forma, pero al abrir el documento en el servidor no lo abra y lanza un error... es posible que le haya eliminado los permisos o algo así, por otra parte me deja sólo cargar un archivo.

    por favor ayúdame

    Carlos

    1. Nestor Tapia dice:

      Hola Carlos

      Asegurate que el php de tu servidor soporte subir archivos grandes, por defecto es 2 mb

      Saludos

  2. Nicolas dice:

    Hola , como hago para subirlos a phpmyadmin?

    1. Nestor Tapia dice:

      Hola Nicolas
      Para subir a phpmyadmin tienes que usar un ciclo, porque son varias imagenes puedes usar el ciclo for o foreach
      y esa opcion se tiene que incorporar en cargar.php

      Saludos

    2. Nestor Tapia dice:

      Hola Nicolas,

      Te dejo este artículo que hablo sobre lo que solicitas

      https://www.baulphp.com/subir-multiples-imagenes-con-pdo.-php-y-mysql

      Saludos cordiales

  3. Excelente trabajo, favor escrìbeme al whatsapp +57 314 7754208

  4. Alfredo dice:

    Hola Nestor!
    He recogido este ejemplo, lo he mejorado y lo he publicado en mi blog. Te he dejado el enlace de autor al final del artículo que redirecciona a este artículo origen. Espero que te parezca bien.
    Un saludo!

    1. Nestor Tapia dice:

      Hola Alfredo,

      Me parece genial, perfecto.
      Un saludo alfredo

  5. Muy buena aportación Nestor. Lo he probado y me funciona perfectamente, además lo he combinado para almacenar los datos en una base de datos y todo correcto. Solo una pregunta, como puedo saber el limite de bytes que puedo subir en multiples archivos? porque si subo mas de x archivos que suman más de 8388608 bytes , me da un error y no me hace nada.
    Como podría comprobar eso antes de que ocurra el error, para que no se pare la aplicación?
    Muchas gracias!!

    1. en el index,html

      en el .php
      $fileSize = $_FILES['tuArchivos']['size'];
      if($fileSize > limite) retun 'Supera el maxiomo permitido';

  6. daniel teran dice:

    excelente articulo, logre realizar un archivo de múltiple carga de archivos txt luego extraer codigos de dichos txt y subirlos a la base de datos, me funciono al 100% muchas gracias

    1. Nestor Tapia dice:

      Saludos Daniel,

      Que bueno que te aya sido útil, saludos a la distancia.

  7. carlos tapia dice:

    Estimado, agradeciendo su aporte le comento que me aparece el siguiente error:

    Notice: Undefined index: miarchivo in C:\wamp\www\upload\cargar.php on line 2

  8. leo dice:

    Hola bro en el servidor local funciona perfecto pero cuando lo subo al servidor sale que hay error, que es el siguiente:
    Se ha producido un error, por favor revise los archivos e inténtelo de nuevo.
    Que se debería hacer?

  9. carlos dice:

    estimado, por qué razón el multi file solo pasa hasta 20 archivos cargado como tope?
    Agradecería su respuesta.

    1. BaulPHP dice:

      Hola Carlos,

      El detalle radica en la configuración de tu fichero php.ini, La directiva max_file_uploads por defecto marca solo 20 ficheros.

      Si deseas modificar la cantidad puedes editar la directiva "max_file_uploads" de tu PHP.INI

      Saludos Cordiales

  10. Jorge Carrillo dice:

    Muy bueno el script, gracias por compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio web protege su privacidad al adherirse al Reglamento General de Protección de Datos de la Unión Europea (GDPR). No utilizaremos sus datos para ningún propósito que no haya dado su consentimiento. Obtenga más información en nuestra página política de privacidad