Inicio arrow Trucos y tutoriales arrow Tutoriales PHP y APACHE arrow ¿Cómo puedo subir archivos a través de un formulario?
¿Cómo puedo subir archivos a través de un formulario? PDF Imprimir E-Mail

Código PHP:

<?php

if (isset($_POST['submit'])) {

    if(is_uploaded_file($_FILES['fichero']['tmp_name'])) { // verifica haya sido cargado el archivo

        if(move_uploaded_file($_FILES['fichero']['tmp_name'], $_FILES['fichero']['name'])) { // se coloca en su lugar final

                    echo "<b>Upload exitoso!. Datos:</b><br>";

            echo "Nombre: <i><a href=\"".$_FILES['fichero']['name']."\">".$_FILES['fichero']['name']."</a></i><br>";

            echo "Tipo MIME: <i>".$_FILES['fichero']['type']."</i><br>";

                    echo "Peso: <i>".$_FILES['fichero']['size']." bytes</i><br>";

                        echo "<br><hr><br>";

        }

    }

 

// A continuación el formulario

}

?>

 

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">

    Archivo: <input name="fichero" type="file">

    <input name="submit" type="submit" value="Upload!">

</form>

Funciona de la siguiente manera:

 

El código sube un archivo via HTTP POST, este se guarda automaticamente con un nombre y en una carpeta temporales del servidor mientras corre el codigo, despues el mismo servidor lo borra (por seguridad). La función is_uploaded_file() verifica que este procedimiento haya sido exitoso. Posteriormente el archivo es movido a su posición final con la función move_uploaded_file().

 

 

Notas:

Es necesario el atributo enctype="multipart/form-data" del formulario, es lo que indica que se están enviando archivos.

El primer key de $_FILES corresponde al name del filebox; En el ejemplo "fichero".

Si se quiere condicionar la carga del archivo según su peso y/o tipo se deberá hacer a través de los datos arrojados por la variable superglobal $_FILES antes de colocarlo en su posición final. Por ejemplo:

Código PHP:

If(is_uploaded_file($_FILE['fichero']['tmp_file']) {

    If($_FILES['fichero']['type']=="image/jpeg") {

        // Proseguimos solo si se trata de un JPG

        move_uploaded_file("...etc...");

    } else echo "El archivo no es una imágen JPG";

// bien puede condicionarse $_FILES['fichero']['size'] > XXXX

// donde 'XXXX' es un número entero representando los bytes máximos del archivo

 

Listas de los MIME TYPE hay muchas en internet. Una muy completa se encuentra en webmaster-toolkit

En el ejemplo el archivo es guardado en la misma carpeta, si se quiere modicar esto ha de cambiarse el parámetro correspondiente de la función move_uploaded_file(). Por ejemplo:

Código PHP:

$ruta= "carpeta/".$_FILES['fichero']['name']; // Se guardaría dentro de "carpeta" con el nombre original

// $ruta= "carpeta/nuevo_nombre.jpg"; si también se quiere renombrar

move_uploaded_file($_FILES['fichero']['tmp_name'], $ruta);

 

// Puede guardarse $ruta en una Base de Datos para su uso posterior

 

El ejemplo funciona con versiones PHP 4.1.x ó superior y con register_globals en OFF.

La carga de archivos es dependiente de la configuración del servidor: disponer de permisos, no exeder el tamaño límite, el nombre de la carpeta personal, etc.

Para detalles lease la documentación oficial: www.php.net/features.file-upload

 

Comentarios
Añadir nuevoBuscar
¡Sólo los usuarios registrados pueden escribir comentarios!

Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved.

 
< Anterior   Siguiente >
 
 

Encuesta

¿ Que opinas de nuestro nuevo diseño Web ?
 

Estan en Linea