Código de PHP - Subir uno o varios archivos al servidor y mover-los a una carpeta

Imágen de perfil

Subir uno o varios archivos al servidor y mover-los a una carpetagráfica de visualizaciones


PHP

estrellaestrellaestrellaestrellaestrella(47)
Actualizado el 04 de Julio del 2016 por Xavi (Creado el 10 de Enero del 2014)
28.315 visualizaciones desde el 10 de Enero del 2014. Una media de 189 por semana
simple código que muestra como subir uno o varios archivos, y guardarlos en una carpeta de nuestro servidor.

Para este ejemplo, solo se permite subir archivos de imagenes del tipo: jpg, png y gif
Se especifica en esta linea:
1
if($_FILES["archivo"]["type"][$i]=="image/jpeg" || $_FILES["archivo"]["type"][$i]=="image/pjpeg" || $_FILES["archivo"]["type"][$i]=="image/gif" || $_FILES["archivo"]["type"][$i]=="image/png")

Si se comenta esta linea, se permitirá subir cualquier tipo de archivo... o si se quiere especificar cualquier otro tipo, tendrás que indicar el tipo mime del archivo...

Aquí tienes un listado de todos los formatos mimetype:
http://www.freeformatter.com/mime-types-list.html

Versión 1
estrellaestrellaestrellaestrellaestrella(47)

Publicado el 10 de Enero del 2014gráfica de visualizaciones de la versión: Versión 1
28.316 visualizaciones desde el 10 de Enero del 2014. Una media de 189 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>Subir una o varias imagenes al servidor</title>
</head>
 
<body>
    <?php
    # definimos la carpeta destino
    $carpetaDestino="imagenes/";
 
    # si hay algun archivo que subir
    if($_FILES["archivo"]["name"][0])
    {
 
        # recorremos todos los arhivos que se han subido
        for($i=0;$i<count($_FILES["archivo"]["name"]);$i++)
        {
 
            # si es un formato de imagen
            if($_FILES["archivo"]["type"][$i]=="image/jpeg" || $_FILES["archivo"]["type"][$i]=="image/pjpeg" || $_FILES["archivo"]["type"][$i]=="image/gif" || $_FILES["archivo"]["type"][$i]=="image/png")
            {
 
                # si exsite la carpeta o se ha creado
                if(file_exists($carpetaDestino) || @mkdir($carpetaDestino))
                {
                    $origen=$_FILES["archivo"]["tmp_name"][$i];
                    $destino=$carpetaDestino.$_FILES["archivo"]["name"][$i];
 
                    # movemos el archivo
                    if(@move_uploaded_file($origen, $destino))
                    {
                        echo "<br>".$_FILES["archivo"]["name"][$i]." movido correctamente";
                    }else{
                        echo "<br>No se ha podido mover el archivo: ".$_FILES["archivo"]["name"][$i];
                    }
                }else{
                    echo "<br>No se ha podido crear la carpeta: up/".$user;
                }
            }else{
                echo "<br>".$_FILES["archivo"]["name"][$i]." - NO es imagen jpg";
            }
        }
    }else{
        echo "<br>No se ha subido ninguna imagen";
    }
    ?>
 
    <form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post" enctype="multipart/form-data" name="inscripcion">
        <input type="file" name="archivo[]" multiple="multiple">
        <input type="submit" value="Enviar"  class="trig">
    </form>
</body>
</html>



Comentarios sobre la versión: Versión 1 (47)

we
01 de Diciembre del 2014
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
binario
18 de Diciembre del 2015
estrellaestrellaestrellaestrellaestrella
la variable $user de la lina 38 no esta dfinida... aun asi .. se puede utilizar el codigo para subir multipels imagenes... la clave esta en el ciclo de repeticion for.. que funsiona de maravilla
Responder
josempq
06 de Enero del 2015
estrellaestrellaestrellaestrellaestrella
gracias, lo voy a probar
Responder
hector
03 de Febrero del 2015
estrellaestrellaestrellaestrellaestrella
hola a todos este código es bastante simple liviano y funciona perfectamente felicitaciones al autor del mismo
Responder
Jose
18 de Marzo del 2015
estrellaestrellaestrellaestrellaestrella
esta buenisimo y muy sencillo felicidades!!!
Responder
genial
06 de Mayo del 2015
estrellaestrellaestrellaestrellaestrella
Gracias por el aporte. @ivanolete
Responder
mmmm
08 de Junio del 2015
estrellaestrellaestrellaestrellaestrella
Malo, no sirve.
Responder
hal
29 de Agosto del 2015
estrellaestrellaestrellaestrellaestrella
muy buen codigo gracias!
Responder
JHON MENDEZ
06 de Septiembre del 2015
estrellaestrellaestrellaestrellaestrella
Código muy bueno!, funcionó perfecto, gracias
Responder
Max
10 de Septiembre del 2015
estrellaestrellaestrellaestrellaestrella
Muchas gracias me sirvió de mucho
Responder
Miguel
16 de Septiembre del 2015
estrellaestrellaestrellaestrellaestrella
Muchas gracias por el código, es sencillo pero practico, y funciona perfectamente, me sirvió mucho.
Responder
Freddy
02 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
Consulta. a este código como puedo hacer para que la imagen se grabe en dos carpetas de destino. ojala me puedan ayudar. Gracias
Responder
hugo
05 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
excelente a porte colega muy funcional
Responder
Imágen de perfil
danny
10 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
Amigo necesito ese código pero cuando lo ejecuto me dice undefined index: archivo en línea 13
Responder
Imágen de perfil
Xavi
12 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
Hola Danny, entiendo que es un Warning de PHP... prueba a reemplazar la linea 13 por esta:

if(isset($_FILES["archivo"]) && $_FILES["archivo"]["name"][0])

Coméntanos si soluciona el problema, ok?
Responder
Imágen de perfil
danny
13 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
Gracias amigo ya me funciona perfectamente con la ultima modificacion de la linea 13
Responder
asd
13 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
y si quiero subir un archivo .bat como es
Responder
asd
13 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
Hola Xavi, me pasarias el codigo que tengo q reemplazar para que me permita subir un archivo ".bat" por favor!
Responder
Imágen de perfil
Xavi
13 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
Hola, para utilizar archivos .bat, creo que tienes que cambiar la linea: 13
if($_FILES["archivo"]["type"][$i]=="image/jpeg" || $_FILES["archivo"]["type"][$i]=="image/pjpeg" || $_FILES["archivo"]["type"][$i]=="image/gif" || $_FILES["archivo"]["type"][$i]=="image/png")

por esta:
if($_FILES["archivo"]["type"][$i]=="application/bat" || $_FILES["archivo"]["type"][$i]=="application/x-bat" || $_FILES["archivo"]["type"][$i]=="application/x-msdos-program" || $_FILES["archivo"]["type"][$i]=="application/textedit" || $_FILES["archivo"]["type"][$i]=="application/octet-stream")

No lo he probado, pero son los MimeType que he encontrado en esta página: http://filext.com/file-extension/bat

Coméntame si te funciona, ok?
Responder
asd
13 de Octubre del 2015
estrellaestrellaestrellaestrellaestrella
Genio Xavi! Ahora Si me coge archivos ".bat" correctamente, acabo de hacer la prueba, antes me cogía solo imágenes pero con esa modificación que me diste me toma archivos .bat !!!!... Gracias por responder, luego me registro en la web y veo en que puedo aportar.
Responder
ADG
09 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Hola Me parece muy bien tu codigo pero solo acepta 4 archivos y me gustaria que aceptara mas de 100 alguien me podria ayudar soy nueva en esto
Responder
matias
09 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Hola bestia, quisiera saber como hacer para poder subir archivos rar ya que no encuentro la forma no se como se escribe el type, gracias!!
Responder
Imágen de perfil
Xavi
10 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Hola Matias para .rar y .zip, serian:

.rar - application/x-rar-compressed, application/octet-stream
.zip - application/zip, application/octet-stream
Responder
Caff
10 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
HOla Alguien me podra ayudar para subir mas de 100 archivos ya que probe este codigo y solo aceptan 4 porfa necesito ayudaaa soy nueva en esto
Responder
Imágen de perfil
Xavi
10 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Hola Caff, el sistema no limita el numero de archivos... puede subir los que quieras siempre y cuando tu servidor web lo permita.
Por defecto tienen un limite de 2Mb, por lo que si sobrepasas ese tamaño, tendrás que aumentarlo en la configuración del php.

En los foros de PHP de esta página, se explica como hacerlo.
Responder
Caff
10 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
aaah ok entonces puedo subir mas de 100 archivos?? y gracias Xavi y buscare el siguiente foro que me dices
Responder
Caff
10 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Hola Xavi una pregunta en donde se encuentra o como se llama el foro que me habías comentado para la configuración ya que no lo encuentro.
Responder
Imágen de perfil
Xavi
11 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
El foro esta aquí:
http://www.lawebdelprogramador.com/foros/PHP/

Lo que tu buscas, esta aquí:
http://www.lawebdelprogramador.com/foros/PHP/1478733-cargar-y-descargar-archivos-de-mas-de-500-mb.html
Responder
CAFFNES
30 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Hola Xavi una pregunta para subir PDF y XML con que type se utiliza ??
Responder
salva
31 de Marzo del 2016
estrellaestrellaestrellaestrellaestrella
Hola Xavi para poder subir archivos pdf como seria?
Responder
Guillermo G
09 de Abril del 2016
estrellaestrellaestrellaestrellaestrella
para pdf y XML

if($_FILES["archivo"]["type"][$i]=="text/xml" || $_FILES["archivo"]["type"][$i]=="application/pdf")
Responder
Antonella
15 de Junio del 2016
estrellaestrellaestrellaestrellaestrella
Funciona perfecto pero me gustaría saber como limitarlo para que suba como máximo 6 imágenes
Responder
Julián
15 de Junio del 2016
estrellaestrellaestrellaestrellaestrella
Hola! muy bueno! pero cómo debería ser el campo de la tabla en la base de datos donde se guarde la ruta de cada imagen? cómo sería el sql INSERT?
Responder
Luis
15 de Junio del 2016
estrellaestrellaestrellaestrellaestrella
Hola que tal, llevo horas buscando un codigo similar a este que me funcione y no hay nada que lo haga, solo me sube de a una foto
Responder
MJC
03 de Julio del 2016
estrellaestrellaestrellaestrellaestrella
Hola Xavi...
Disculpa si necesito subir videos como quedaria modificado.....
Por favor, me urge!!!
Gracias!!
Responder
Imágen de perfil
Xavi
04 de Julio del 2016
estrellaestrellaestrellaestrellaestrella
Hola MJC, para ello, tendrás que modificar el formato de archivo que esperas... por ejemplo, para la versión actual, solo espera imágenes...

if($_FILES["archivo"]["type"][$i]=="image/jpeg" || $_FILES["archivo"]["type"][$i]=="image/pjpeg" || $_FILES["archivo"]["type"][$i]=="image/gif" || $_FILES["archivo"]["type"][$i]=="image/png")

Puedes quitar esta linea y te permitirá cualquier tipo de archivo... o indica el tipo de archivo que deseas que te permita subir.
Responder
informatic
11 de Agosto del 2016
estrellaestrellaestrellaestrellaestrella
Hola, muy buen ejemplo pero sabes como es posible subir una imagen con nombre, es decir, ejemplo.jpg
y si subo otra llamada con su mismo nombre, como hago para que no la reemplaze y suba ambas imagenes pero sin que se duplique el nombre??
Responder
Cristian Fontalvo
11 de Agosto del 2016
estrellaestrellaestrellaestrellaestrella
hola xavi,

tengo una duda, quisiera que el archivo se guarde dentro de una carpeta del disco c, ya que no he logrado cambiar la carpeta me muestra un erros cuando cambio el lugar. te agradecería tu ayuda
Responder
Alekz
22 de Agosto del 2016
estrellaestrellaestrellaestrellaestrella
Bueno no se si es lo que quieres pero yo cree una variable para usar creacion de carpeta dinamicamente

$nombre_carpeta=$_request['codigo_usuario']; //aqui requiere el nombre enviado de una pagina anterior

# definimos la carpeta destino
$carpetaDestino="imagenes/$nombre_carpeta/";
Responder
Rhonny Zamora
23 de Agosto del 2016
estrellaestrellaestrellaestrellaestrella
Saludos amigo excelente código. Muy útil y bien explicado. Me sirve perfecto con fotos y archivos pequeños pero subiendo videos de 60-70 mb no completa la subida. Mas sin embargo por FTP si lo hace. ALguna idea? Gracias de antemano.
Responder
ilka
07 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
como podria ingresar solicitar un nombre y que con ese nombre que ingresa la persona la imagen que se sube sea el mismo nombre ingresado ?
Responder
phpprogramer
15 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
hola antes que nada muy linda pagina una consulta hay forma de cancelar todos los archivos subidos si un archivo tiene una extencion que no sean la permitida ya que si el usuario sube dos imagenes y una incorrecta las dos primeras imagenes se guardan en la carpeta ocupando espacio
Responder
Imágen de perfil
Xavi
15 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
Hola, lo que tendrías que hacer antes de la linea 16, es hacer un bucle que revise que todas las extensiones cumplan con su cometido antes de seguir el código y mover-los a tus carpetas.

Algo así:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Subir una o varias imagenes al servidor</title>
</head>

<body>
<?php
# definimos la carpeta destino
$carpetaDestino="imagenes/";

# si hay algun archivo que subir
if($_FILES["archivo"]["name"][0])
{

# variable que determina si todos los archivos subidos tienen el formato
# correcto
$formatoCorrecto=true;

# recorremos todos los arhivos que se han subido para verificar que
# tienen una extensión correcta antes de moverlos a nuestra carpeta
for($i=0;$i<count($_FILES["archivo"]["name"]);$i++)
{
# si es un formato de imagen
if($_FILES["archivo"]["type"][$i]=="image/jpeg" || $_FILES["archivo"]["type"][$i]=="image/pjpeg" || $_FILES["archivo"]["type"][$i]=="image/gif" || $_FILES["archivo"]["type"][$i]=="image/png")
{

# Indicamos que algun archivo tiene un formato erroneo
$formatoCorrecto=false;

echo "<br>".$_FILES["archivo"]["name"][$i]." - NO tiene un formato correcto";
}
}

if($formatoCorrecto)
{
# recorremos todos los arhivos que se han subido para moverlos a nuestra carpeta
for($i=0;$i<count($_FILES["archivo"]["name"]);$i++)
{

# si exsite la carpeta o se ha creado
if(file_exists($carpetaDestino) || @mkdir($carpetaDestino))
{
$origen=$_FILES["archivo"]["tmp_name"][$i];
$destino=$carpetaDestino.$_FILES["archivo"]["name"][$i];

# movemos el archivo
if(@move_uploaded_file($origen, $destino))
{
echo "<br>".$_FILES["archivo"]["name"][$i]." movido correctamente";
}else{
echo "<br>No se ha podido mover el archivo: ".$_FILES["archivo"]["name"][$i];
}
}else{
echo "<br>No se ha podido crear la carpeta: up/".$user;
}
}
}
}else{
echo "<br>No se ha subido ninguna imagen";
}
?>

<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post" enctype="multipart/form-data" name="inscripcion">
<input type="file" name="archivo[]" multiple="multiple">
<input type="submit" value="Enviar" class="trig">
</form>
</body>
</html>
Responder
dantesito
15 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
hola gracias por la pronta respuesta mira estube implementando tu codigo y resulta que si subo cualquier tipo de imagen siempre me dice que tiene un formato erroneo y si no subo nada funciona lo mas bien.
Responder
mariano
15 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
tambien tengo otra duda ya que si subo una imagen este no me deja pero si subo cualquier tipo de archivo si y la otra es que si subo una archivo que no sea imagen crea una carpeta con el mismo nombre del archivo desde ya gracias espero tu respuesta saludos
Responder
Josshua
23 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
Hola, quisiera me explicaras la linea 10
$carpetaDestino="archivos prueba/"; <<---- hice una carpeta prueba en el escritorio con este nombre
solo que al momento de dale click en el boton enviar, me manda a una pagina que no se encuentra y no sube nada a la carpeta... saludos
Responder
nancy
20 de Octubre del 2016
estrellaestrellaestrellaestrellaestrella
Muchísimas gracias!!!!
Responder

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s2580