Vamos a ver un caso especial, como descargar un archivo desde un
formulario. Para ello utilizaremos una etiqueta INPUT de tipo FILE,
soportada a partir de las versiones de los navegadores Nestcape Navigato
2.0 e Internet Explorer 4.0.
El formulario debe usar el metodo post, y el atributopost,
y el atributo enctype debe
tener el valor multipart/form-data. Ademas al formulario debemos
añadirle un campo oculto de nombre MAX_FILE_SIZE, al cual le daremos
el
valor en byte del tamaño maximo del archivo a descargar.
<FORM ENCTYPE="multipart/form-data" ACTION="7-3.php" METHOD="post">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE"
value="100000">
<INPUT NAME="archivo" TYPE="file">
&Formularioslt;INPUT TYPE="submit"
VALUE="Descargar Archivo">
</FORM>
Cuando el formulario es enviado, PHP detectarara automaticamente que
se esta descargando un archivo y lo colocara en un directorio temporal
en el servidor. Dicho directorio sera el que esta indicado en el
archivo de configuracion php.ini, o en su defecto en el directorio
temporal del sistema.
Cuando PHP dectecta que se esta descargando un archivo crea varias
variables con el prefijo del nombre del archivo pero con distintas
terminaciones. La variable terminada en _name contiene el nombre original
del archivo, la terminacion en _size el tamaño en bytes de este, y la
variable terminada en _type nos indicara el tipo de archivo si este es
ofrecido por el navegador.
Si el proceso de descarga no ha sido correcto la variable archivo
tomara el valor none y _size sera 0, y si
el proceso ha sido correcto,
pero la variable teminada en _size da 0, quiere decir que el archivo a
descarga supera el tamaño maximo indicado por MAX_FILE_SIZE.
Una vez descargado el archivo, lo primero que debemos hacer es moverlo
a otro lugar, pues sino se hace nada con el, cuando acabe la ejecucion
de la pagina se borrara.
Veamos un ejemplo de todo lo dicho.
<HTML>
<BODY>
<?PHP
if ($enviar) {
if ($archivo != "none" AND $archivo_size != 0){
echo "Nombre: $archivo_name <BR>\n";
echo "Tamaño: $archivo_size <BR>\n";
echo "Tipo: $archivo_type <BR>\n";
/* para Windows
if (! copy ($archivo, "C:\\TEMP\\".$archivo_name)) {
echo "<h2>No se ha podido copiar el archivo</h2>\n";
}
*/
/* para Linux/Unix */
if (! copy ($archivo, "/tmp/".$archivo_name)) {
echo "<h2>No se ha podido copiar el archivo</h2>\n";
}
} elseif ($archivo != "none" AND $archivo_size == 0) {
echo "<h2>Tamaño de archivo superado</h2>\n";
} else {
echo "<h2>No ha escogido un archivo para descargar</h2>\n";
}
echo "<HR>\n";
}
?>
<FORM ENCTYPE="multipart/form-data" ACTION="<?php echo $PHP_SELF ?>" METHOD="post">
<INPUT type="hidden" name="MAX_FILE_SIZE" value="100000">
<p><b>Archivo a descargar<b><br>
<INPUT type="file" name="archivo" size="35"></p>
<p><INPUT type="submit" name="enviar" value="Aceptar"></p>
</FORM>
</BODY>
</HTML>
|