Lenguaje 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.

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

 

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. 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. 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. 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!

  3. 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’;

  4. 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

  5. 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

  6. 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?

    1. 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

Deja una respuesta

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

Botón volver arriba