4 de junio de 2013

Subir archivos al servidor con PHP

Una de las funciones que mayor funcionalidad y dinamismo da a nuestras páginas web, es la posibilidad de subir archivos al servidor. Aunque es necesario condicionar los tipos de archivos que se permitirán subir.

Para utilizar esta función es necesario crear un formulario el cual va a recepcionar el fichero.filesupload

Cuando trabajamos con un servidor local, el fichero lo podemos colocar de forma temporal en el directorio que le hemos determinado en el fichero php.ini; como por ejemplo el directorio puede ser: c:/ficheros/upload/.

Pero cuando trabajamos con un servidor web, el tratamiento puede ser diferente, ya que podemos almacenar estos ficheros en el mismo servidor o podemos hacer que nos lleguen mediante un mensaje a nuestra dirección de e-mail.

Bueno, después de esta breve explicación, pongamos manos a la obra.

Lo primero que vamos a hacer, es un formulario html, que es el que recibirá el archivo que deseamos subir y/o enviar.

<html>
 <head>
      <title>Subir fichero al servidor</title>
 </head>
 <style type="text/css">
      body {font-family:"Verdana";}
 </style>
 <body>
   <h2>Formulario para el envio de archivos</h2>
   <form action="enviar_file.php" method="post" enctype="multipart/form-data">
     <input type="hidden" name="limite" value="500000" >
     <p><strong>Archivo a transferir</strong><br />
     <input type="file" name="archivo"></p>
     <p><input type="submit" name="submit" value="Aceptar"></p>
   </form>
 <small>
   Instrucciones: Pulse el botón 'Seleccionar archivo', seleccione el archivo deseado y presiones el botón 'Aceptar'
 </small>
 </body>
</html>

Guardaremos este archivo como: subirarchivo.html

Lo que se hizo en el código anterior es un formulario HTML simple, con la único detalle de que debemos agregar el enctype=»multipart/form-data», el cual es obligatorio para el envió de archivos; el action del formulario sera a una pagina php a la cual llamaremos:  enviar_file.php.

También crearemos una etiqueta oculta (tipo: «hidden») en el cual indicamos el limite de tamaño que podrán tener los archivos que se desean subir.

Esta página debe quedar mas o menos así:

fileEnviar_uno

Ustedes pueden hacer su propio diseño, utilizado estilos de css.

A continuación crearemos un archivo php, al cual llamaremos ‘enviar_file.php’; este archivo se encargará de validar la información y hacer el proceso de envío.

El código es el siguiente:

<?php
if(isset($_POST["submit"]))
{
 $nombre_archivo = $_FILES["archivo"]["name"];
 $tipo_archivo = $_FILES["archivo"]["type"];
 $tamano_archivo = $_FILES["archivo"]["size"];

 $limite = $_POST["limite"];
 if($tamano_archivo<=$_POST['limite'])
 {
 if(move_uploaded_file($_FILES["archivo"]["tmp_name"], $nombre_archivo))
 {
 echo "El archivo " . $nombre_archivo . " se ha transferido correctamente. <br />";
 echo "Su tamaño es de: " . $tamano_archivo . " bytes.";
 echo "El tipo de archivo es: " . $tipo_archivo;
 }
 else
 {
 echo "No se ha podido transferir el archivo, verifique el tamaño del archivo e intente nuevamente.";
 }
 }
 echo "<a href='.$nombre_archivo.'>";
}
?>

Expliquemos un poco lo que hicimos…

if(isset($_POST["submit"]))

En esta linea nos aseguramos que se haya presionado en botón de enviar, verificando la variable POST «submit».

En las siguientes líneas, utilizamos la variable superglobal $_FILES (compatible con php version 4.1.0) con la cual obtenemos el nombre, tipo y tamaño del archivo. Esta información la almacenamos en variables.

$nombre_archivo = $_FILES["archivo"]["name"];
 $tipo_archivo = $_FILES["archivo"]["type"];
 $tamano_archivo = $_FILES["archivo"]["size"];

También almacenamos en variable el limite del archivo, indicado en la pagina html con la etiqueta oculta (hidden).

$limite = $_POST["limite"];

Ahora verificamos que el tamaño del archivo no supere el limite establecido

if($tamano_archivo<=$_POST['limite'])

En caso de que el tamaño del archivo sea menor al limite, procedemos a enviar el archivo, utilizando la función ‘move_uploaded_file’ la cual verifica que el archivo a subir sea válido. Esta función necesita de dos parametros: el primero el nombre del archivo y segundo la ruta donde se desea almacenar el archivo.

 if(move_uploaded_file($_FILES["archivo"]["tmp_name"], $nombre_archivo))

En este ejemplo indicamos el nombre del archivo valiendonos del nombre temporal del archivo y en el caso de la ruta solo se indico el nombre, con lo cual el archivo se almacenará en el mismo lugar en donde tenemos nuestra pagina php.

Esta función ‘move_uploaded_file’  la incluimos dentro de la condicional ‘if‘ para que en caso de ser exitosa (retorna ‘true’) entonces mostraremos los datos del archivo:

echo "El archivo " . $nombre_archivo . " se ha transferido correctamente. <br />";
 echo "Su tamaño es de: " . $tamano_archivo . " bytes.";
 echo "El tipo de archivo es: " . $tipo_archivo;echo "No se ha podido transferir el archivo, verifique el tamaño del archivo e intente nuevamente.";

Por ultimo creamos un link hacia el archivo subido.

echo "<a href='.$nombre_archivo.'>";

Cabe mencionar que, este es un ejemplo sencillo, es posible mejorarlo agregándole por ejemplo: una condicional para que solo permitir subir un tipo de archivo específico o para evitar subir archivos ejecutables (.exe .bat) que puedan dañar nuestro sitio.

Si te gustas la programación en php, te invitamos a que veas este curso AQUI.

Tanto si no tienes conocimientos de programación, como si ya tienes algunos este curso es para TI, CURSO DE PHP

Deja una Respuesta