PHP:¿Cómo puedo subir archivos a través de un formulario?
De Foros del Web
Con el siguiente ejemplo:
<?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 automáticamente con un nombre y en una carpeta temporales del servidor mientras corre el código, después 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:
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 modficar esto ha de cambiarse el parámetro correspondiente de la función move_uploaded_file().
Por ejemplo:
$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 exceder el tamaño límite, el nombre de la carpeta personal, etc.
- Para detalles léase la documentación oficial: www.php.net/features.file-upload
--ghostrider 20 Nov 2002
Este artículo es parte de las FAQs de PHP y el Manual de PHP.
- Indice de las FAQs: Conceptos, Configuración, Formularios, Manejo de Archivos, Integración con Bases de Datos, Sesiones, Extensiones y Librerías, Seguridad, Funciones, Clases y Objetos, Frameworks
- Recomendamos también: Guía Zend, Frameworks PHP, Aceleradores PHP
- Agregar al FAQ: PHP: Instrucciones para agregar una pregunta al FAQ de PHP
- Para preguntas sobre PHP: Foro de Php
