Cómo subir archivos al servidor desde PHP

Recientemente he tenido que crear un pequeño script para subir ficheros al servidor desde una web desarrollada en PHP. Normalmente este tipo de herramientas se utilizan para subir imágenes, ficheros adjuntos o para subir un avatar en un foro. En mi caso lo he utilizado para un concurso en el que cada participante debe subir tres imágenes de su proyecto.

Para poder hacer un upload de archivos en PHP necesitamos crear un formulario con un parámetro especial enctype=”multipart/form-data”. Este parámetro permite indicar que vamos a enviar, además de texto, varios ficheros al puslar el submit del formulario. Los elementos necesarios para subir los ficheros son los input file, de los cuales crearemos tantos como deseemos (asignado a cada uno un name único).

El formulario de envío nos quedaría tal que así:

<form name=”form” action=”alta.php” method=”POST” enctype=”multipart/form-data” >
<input type=”hidden” name=”MAX_FILE_SIZE” value=”1500000″>
<input name=”nombre” value=”" size=”30″>
<input name=”email” value=”" size=”30″>
<input name=”file1″ type=”file”>
<input type=”submit” value=”Enviar”>
</form>

El fichero que gestiona los datos del formulario alta.php recibirá en el contexto 3 elementos: el name, el email, y el archivo file1. Los dos primeros los recuperaremos de forma convencional a través de $_POST, mientras que el archivo lo recuperaremos a través de $_FILES, que es un array que almacena los datos del mismo: tamaño, formato, nombre, etc. El input MAX_FILE_SIZE nos permite indicar cuál es el tamaño máximo de los archivos que se pueden subir. El valor está en kbs. Sin embargo, esto se puede comprobar posteriormente en alta.php a través de la variable size del array $_FILES. Ahora lo veremos.

<?php

$nombre_archivo = $_FILES [ 'file1' ] [ 'name' ];
$tipo_archivo = $_FILES [ 'file1' ] [ 'type' ];
$tamano_archivo = $_FILES [ 'file1' ] [ 'size' ];
$nombre_temp = $_FILES [ 'file1' ] [ 'tmp_name' ];

if (((strpos($tipo_archivo, “gif”) || strpos($tipo_archivo, “jpeg”) || strpos($tipo_archivo, “png”) && ($tamano_archivo < 1500000))) {

if (is_uploaded_file($nombre_temp)) {

copy($nombre_temp, “‘directorio/’.$_FILES [ 'file1' ] );

}else{

echo ‘Se ha producido un error al intentar subir el archivo’;

}else{

echo ‘El archivo seleccionado no es una imagen o excede el 1.5mb de peso’;

} ?>

Al igual que recogemos del contexto cualquier elemento de un formulario, recogeremos el array con los datos del archivo con $_FILES. Una vez hemos recuperado sus características, comprobamos que cumple con los requisitos del formulario: que es una imagen (es gif, jpg ó png), esta comprobación, en vez de hacerla con los MIMEs (‘image/jpeg’), se hace de forma más sencilla buscando la extensión en el nombre del archivo subido. Además, también se comprueba que pesa menos de 1.5mb. Podemos añadir cuantas comprobaciones deseemos, basta con meterlas a continuación del primer if.

En caso de que el fichero subido cumpla con todos los requerimientos, procederemos a alojarlo en nuestro servidor. El proceso hace una copia temporal del archivo en el servidor para su posterior tratamiento. La función is_uploaded_file se encarga de indicarnos si se ha realizado correctamente o no. En caso afirmativo, se procede a hacer una copia en nuestro servidor gracias a la función copy. Esta función recibe dos parámetros: nombre y path temporales del archivo, y el path o ruta donde queremos guardarlo. Es necesario que el directorio del ftp donde queremos alojar nuestras imágenes tenga permisos de escritura. En nuestro caso vamos a copiar los archivos en un directorio creado a tal efecto.

Cómo hacer un upload en PHP para subir archivos al servidor

Etiquetas:

Compártelo
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Bitacoras.com
  • Identi.ca
  • LinkedIn
  • Live
  • MySpace
  • Netvibes
  • Ping.fm
  • RSS
  • StumbleUpon
  • Technorati
  • Twitter
  • email
  • PDF
  • Print

Suscríbete a nuestro Feed para recibir las últimas novedades de diseño web, diseño gráfico y programación

Entradas relacionadas:

Entradas relacionadas en el blog de N4gashBeyondCompare & WinMerge: comparar archivos para ver sus diferencias
Entradas relacionadas en el blog de N4gashBloquear el Hotlinking en tu servidor web
Entradas relacionadas en el blog de N4gashCómo subir imágenes a internet para foros
Entradas relacionadas en el blog de N4gashActualizando a wordpress 2.5
Entradas relacionadas en el blog de N4gashCoded Preview, presentación profesional de diseños web

4 Comentarios hasta el momento »

  1. polletexloko dijo

    19 de septiembre del 2009 a las 23:34

    gracias voy a probar a ver que tal! x]

  2. karlos dijo

    13 de mayo del 2010 a las 3:05

    copy($nombre_temp, “‘directorio/’.$_FILES['file1']“);
    este framento del condigo que esta dentro del codigo php alta.php muestra un error segun dreamweaver cs5
    me gustaria saber cual es el error que la verdad no doy con el, dice ademas que es un error de sintaxis, te agrdeceria, en tu pronta respuesta, gracias

  3. Nagash dijo

    13 de mayo del 2010 a las 8:21

    @polletexloko: Espero que te haya sido de utilidad.

    @karlos: Tienes que tener creado el directorio con el nombre ‘directorio’ para almacenar los ficheros subidos.

  4. Nagash dijo

    6 de junio del 2010 a las 16:23

    @Karlos: es probable que el error te lo de por las comillas simples y doblas, sustitúyelas y pon ” y ‘.

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre:

E-Mail:

Sitio WEB:

Comentario: