Buscador


En todo Internet
En Uterra.Com

Contenidos


En este artículo vamos a ver una de las tareas más comunes a las que se enfrenta cualquier webmaster, la publicación de archivos en el servidor.

Imaginemos que estamos creando una Web y que queremos que los usuarios puedan subir fotos al servidor. Básicamente lo que haremos será crear un formulario en lenguaje HTML mediante el cual el usuario pueda cargar una foto de manera análoga a como lo haría si quisiera enviar una foto por e-mail.

Además de subir la foto al servidor, también nos vamos a preocupar de darle un nombre, ya que por seguridad los archivos que se suban al servidor requerirán que se le asigne un determinado nombre. Por lo general el nombre del archivo se suele asignar siguiendo algún criterio, pero no entraremos en eso, y el nombre se le enviaremos a través del mismo formulario, más que nada, para simplificar el proceso.

Por tanto, necesitamos un formulario que nos permita asignar un nombre para el archivo (ni que decir tiene que el nombre debe respetar los criterios generales de nomenclatura que son aplicables a cualquier archivo Web). El nombre lo podemos enviar a través de un campo “text”, y el archivo lo agregaremos mediante un campo “file”. El formulario, para que pueda enviar archivos precisa del atributo “enctype="multipart/form-data"”.

Dicho esto, la página que contiene el formulario puede ser una página con extensión .htm, pero la página que publica el archivo en el servidor deberá tener la extensión .php.

La página que contiene el formulario no tiene mayor complejidad, es código HTML básico.

La página que sube el archivo al servidor, que como hemos dicho será una página con extensión .php, distinguiremos varias partes.

Por un lado tenemos la recepción del nombre del archivo y el nombre. Seguidamente le cambiamos el nombre al archivo. Si solo hacemos esto, tendríamos nuestro archivo en el mismo directorio donde esta el formulario y la página que lo procesa, pero como nuestro objetivo es “colocarlo” en un directorio concreto, que se llama “imagenes”, deberemos copiarlo a ese directorio, lo que hacemos mediante un proceso de copia.

Una vez hecho esto, el archivo permanece en el directorio raíz, y dado que en ese lugar no lo queremos para nada, lo eliminamos.

Por supuesto, aunque no lo he dicho antes, debemos haber creado la carpeta en la que queremos ubicar los archivos, si no lo hacemos, no tendremos ningún resultado.

Este es el procedimiento básico para publicar archivos en nuestro servidor, pero un sistema como este no es nada recomendable usarlo tal y como esta. El motivo es que cualquiera podría subir cualquier archivo, como virus, y esto debemos evitarlo a toda costa. Por tanto, seria necesario también validar el tipo de archivo que vamos a permitir que se suba al servidor, tanto como su volumen. Respecto al volumen del archivo me queda añadir que como medida de precaución los servidores de manera general no permiten subir archivos de más de 2 megabytes. Para salvar este posible inconveniente deberéis usar un archivo “.htaccess” o bien, poneos en contacto con vuestro proveedor de hosting.

Hemos actualizado este código para que funcione correctamente en la version 5.3 de PHP. El cambio unicamente afecta a $HTTP_POST_FILES que ha quedado obsoleto y ahora tiene la forma $_FILES. 

Sin más, el código es el siguiente:


-------- form.htm 
<html> 

<head> 
<title>Sube una foto al servidor y la nombra con el nombre asignado y la copia en un directorio que  
especifiquemos</title> 
</head> 

<body> 
<h3>Sube una foto al servidor y la nombra con el nombre asignado</h3> 
<form action="publica_foto.php" method="post" enctype="multipart/form-data"> 

<p>Nombre <input type="text" name="elnombre" size="15"></p> 
<p>Foto      <input type="file" name="file01" size="15"></p> 

<p><input type="submit" value="Subir Foto"></p> 
<p><input type="reset" value="Limpiar"></p> 

</form> 
</body> 

</html> 
-------- publica_foto.php 
<?php 

//datos del arhivo  
$nombre_archivo $_FILES['file01']['name'];  
if (
move_uploaded_file($_FILES['file01']['tmp_name'], $nombre_archivo)) 

$new_nombre=$_POST["elnombre"];;  
$archivo="$nombre_archivo"

// echo "Nombre Antiguo: $archivo<br>";  

$archivo_renombrado="$new_nombre.jpg";  
rename($archivo$archivo_renombrado);  

// echo "Nombre Nuevo: $archivo_renombrado";  
// --------------------------------------------------------------------------------------------------------------- 
// ----------Copiamos el archivo al nuevo directorio o carpeta que en este caso se llama IMAGENES------------ 
// ----------Dicho directorio debe tener permisos 0777 de lo contrario no se prodra alterar sus contenidos 

$carpeta "imagenes";    // Carpeta en la que guardaremos nuestros archivos 

if (copy("$archivo_renombrado""$carpeta/$archivo_renombrado"))  

echo 
"El fichero ha sido copiado con éxito"
} else { 
echo 
"El fichero NO se ha podido copiar"

// --------------------------------------------------------------------------------------------------------------- 
// ----------Eliminamos el original despues de haber hecho una copia en el nuevo directorio------------ 

// Eliminamos el archivo del directorio raiz 

    
$eliminafile "$archivo_renombrado"
    
unlink($eliminafile); 
?>

Código PHP