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):
- Servidor local
- PHP como lenguaje de programación
- 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.
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
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».
Descargar código fuente
Descargar cargar múltiples archivos con PHP
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
Hola Carlos
Asegurate que el php de tu servidor soporte subir archivos grandes, por defecto es 2 mb
Saludos
Hola , como hago para subirlos a phpmyadmin?
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
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
Excelente trabajo, favor escrìbeme al whatsapp +57 314 7754208
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!
Hola Alfredo,
Me parece genial, perfecto.
Un saludo alfredo
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!!
en el index,html
en el .php
$fileSize = $_FILES[‘tuArchivos’][‘size’];
if($fileSize > limite) retun ‘Supera el maxiomo permitido’;
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
Saludos Daniel,
Que bueno que te aya sido útil, saludos a la distancia.
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
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?
estimado, por qué razón el multi file solo pasa hasta 20 archivos cargado como tope?
Agradecería su respuesta.
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
Muy bueno el script, gracias por compartir