Anda di halaman 1dari 4

Crear un formulario de carga-Archivo

Para permitir a los usuarios subir archivos de una forma puede ser muy til.
Mira el siguiente formulario para subir archivos HTML:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
Tenga en cuenta lo siguiente acerca de la forma HTML anterior:

El atributo enctype de la etiqueta <form> especifica el tipo de contenido que se utilizar


al enviar el formulario. "Multipart / form-data" se utiliza cuando se requiere un
formulario de datos binarios, tales como el contenido de un archivo, se va a cargar

El type = "file" atributo de la etiqueta <input> especifica que la entrada debe ser
procesada como un archivo. Por ejemplo, cuando se ve en un navegador, habr un botn
de exploracin junto al campo de entrada

Nota: Permitir a los usuarios subir archivos es un gran riesgo de seguridad. Slo permita que los
usuarios de confianza para llevar a cabo la carga de archivos.

Cree el script Subir


El "upload_file.php" archivo contiene el cdigo para cargar un archivo:

<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>

Al utilizar el global de PHP array $ _FILES puede cargar archivos desde un equipo cliente al
servidor remoto.
El primer parmetro es el nombre del formulario de entrada y el segundo ndice puede ser
"nombre", "tipo", "tamao", "tmp_name" o "error". De esta manera:

$ _FILES ["Archivo"] ["name"] - el nombre del archivo subido

$ _FILES ["Archivo"] ["tipo"] - el tipo del archivo subido

$ _FILES ["Archivo"] ["size"] - el tamao en bytes del archivo subido

$ _FILES ["Archivo"] ["tmp_name"] - el nombre de la copia temporal del archivo


almacenado en el servidor

$ _FILES ["Archivo"] ["error"] - el cdigo de error resultante de la carga de archivos

Esta es una manera muy simple de subir archivos. Por razones de seguridad, debe agregar
restricciones en lo que el usuario est autorizado a cargar.

Restricciones a la subida
En este script se aade algunas restricciones para la carga de archivos. El usuario puede subir
gif, jpeg, png y archivos, y el tamao del archivo debe ser de menos de 20 kb...:

<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>

Nota: Para IE reconozca los archivos jpg el tipo debe ser pjpeg, para FireFox debe ser jpeg.

Guardar el archivo de Subida


Los ejemplos anteriores crear una copia temporal de los archivos cargados en la carpeta
temporal de PHP en el servidor.
Los archivos temporales de copiado desaparece cuando el programa termina. Para guardar el
archivo cargado debemos copiarlo a una posicin distinta:

<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}

}
else
{
echo "Invalid file";
}
?>

Este script comprueba si el archivo ya existe, si no lo hace, se copia el archivo a la carpeta


especificada.
Nota: En este ejemplo se guarda el archivo en una carpeta nueva llamada "upload"

Anda mungkin juga menyukai