Validar con$_FILES

Saludos.
¿Cómo puedo validar que el numero de archivos a subir al servidor no sean mayor10MB?
Quiero hacer esta validación para que el usuario no escoja archivos mayores degradezco la ayuda que me puedas brindar.
1

1 Respuesta

19.525 pts. Programador Php, MySQL, C, C++, Html, Xml, Ajax,...
Utilizare un ejemplo, en él que subiremos un archivo. Este solo puede ser de extensión .zip y ocupar menos de 30 kb, definiendo así las opciones del upload con php.
Primero empezaremos con el formulario html, encargado de enviar el archivo al servidor.
<form action="subir.php" method="post" name="miformu" enctype="multipart/form-data">
<input name="archivo" type="file">
</form>
Cómo te darás cuenta, este formulario tiene un parámetro nuevo llamado enctype, con el valor "multipart/form-data", informando que envía datos y archivos, opción indispensable para el correcto upload del fichero.
También utilizamos un input "file" para que el usuario pueda explorar su respectiva computadora en busca del archivo a subir.
Suponemos que el script al que enviamos el formulario y el encargado de procesarlo se llama subir.php. A continuación explicare el contenido y funcionamiento de este archivo.
Cómo vimos en el formulario, el campo de archivo se llama archivo:
<input name="archivo" type="file">
De acuerdo a este nombre sera que trabajaremos en el lado del servidor, osea en el script.
El archivo se guarda en la carpeta temporal del servidor, dato que hay que tenerlo en cuenta ya que no todos los servidores cuentan con esta opción y ponen el tamaño de dicha carpeta a 0, imposibilitando subir archivos.
Para referirnos al archivo en el script lo hacemos por medio de:
$archivo
Otras propiedades que tendremos a nuestra disposición es el tamaño (en bytes) y el nombre del archivo.
$archivo_name - Nombre del archivo (ej: instaladores.zip, miarchivo.zip)
$archivo_size - Tamaño del archivo en bytes (si son 10kb serian 10000 bytes)
--------------------------------------------------------------------------------
Nota: A este punto cuándo nos referimos al archivo lo hacemos siempre con $archivo, debido a que en el formulario lo denominamos de esta forma (<input name="archivo" type="file">).
La explicación la hago suponiendo un conocimiento básico de php por parte del lector.
--------------------------------------------------------------------------------
Pr imero mostrare el script, luego explicare linea por linea el script:
<?php
//formulario de upload por jorge luis martinez
//http://miscodigos.jlmnetwork.com/
$extension = explode(".",$archivo_name);
$num = count($extension)-1;
if($extension[$num] == "zip")
{
if($archivo_size < 30000)
{
if(!copy($archivo, "archivos/".$archivo_name)
{
echo "error al copiar el archivo";
}
else
{
echo "archivo subido con exito";
}
}
else
{
echo "el archivo supera los 30kb";
}
}
else
{
echo "el formato de archivo no es valido, solo .zip";
}
?>
Lo primero que haremos sera comprobar que la extensión del archivo es la permitida (.zip).
Para ello utilizamos la función de php explode, la cual guardará en un array el nombre del archivo según el primer parámetro (el punto):
$extension = explode(".",$archivo_name);
Para mejor entendimiento, si el archivo se llama ficheros.zip el explode pondría en este caso en la variable $extencion el nombre en dos partes:
$extension[0] y $extension[1]
Los cuales contienen:
$extension[0] --> "ficheros"
$extension[1] --> "zip"
Ahora obtendremos la longitud del array, en este caso seria de 2 (ya que contiene 2 elementos "ficheros" y "zip"), a ese numero le mermamos 1 y lo asignamos a una variable llamada $num:
$num = count($extension)-1;
--------------------------------------------------------------------------------
Nota: Le hemos mermado 1 a la longitud por que cuando queramos llamar al array $extension[$num] debemos de hacerlo teniendo en cuenta que los elementos van desde 0, por lo que aunque contenga 2 elementos no podemos llamar al segundo con $extension[2], si no que tenemos que llamarlo por su posición $extencion[1].
--------------------------------------------------------------------------------
Ah ora haremos el condicional. Si la extensión del archivo es zip continuaremos con el proceso de upload, de lo contrario mostraremos mensaje de error.
if($extension[$num] == "zip")
{
...
}
else
{
echo "el formato de archivo no es valido, solo .zip";
}
Ahora, continuaremos con el upload, suponiendo que el archivo era el correcto.
Lo siguiente a hacer es comprobar el tamaño del archivo; para ello utilizaremos la variable antes mencionada $archivo_size. Si el tamaño es menor a los 30kb (recuerde, debe especificarlo en bytes, por lo que serian 30000) continuaremos con el upload, de lo contrario mostraremos un mensaje de error:
if($archivo_size < 30000)
{
...
}
else
{
echo "el archivo supera los 30kb";
}
Ahora, continuaremos con el upload, suponiendo que el tamaño del archivo es correcto.
Utilizaremos la función copy() de php, la cual copiara el archivo a la carpeta que especifiquemos.
--------------------------------------------------------------------------------
Nota: El archivo que hemos subido por medio del formulario se guarda en la carpeta temporal del servidor y se accede a él por medio de la variable $archivo, este archivo será borrado de la carpeta temporal cuando el script finalize su ejecución, este proceso es automático y lo realiza el servidor, usted no tiene que preocuparse por este aspecto.
--------------------------------------------------------------------------------
En este caso copiaremos el archivo a una carpeta del servidor llamada archivos. Nótese que la ruta de copiado debe de ser relativa, no absoluta, y es relativa al script.
Osea, si el script se ejecuta en:
http://www.servidor.net/cuenta/carpeta/subir.php
La funcion en este caso intentara copiarlo a:
http://www.servidor.net/cuenta/carpeta/archivos/
Lo hemos puesto en un if y con signo de negación (!), para que en caso de no poder copiar el archivo nos salga mensaje de error:
if(!copy($archivo, "archivos/".$archivo_name))
{
echo "error al copiar el archivo";
}
else
{
echo "archivo subido con exito";
}
En este caso el archivo ha sido copiado a la carpeta archivos y con el mismo nombre que tenía, osea, si el archivo se llamaba "ficheros.zip", el archivo ha quedado en la carpeta con el mismo nombre "archivos/ficheros.zip".
Nótese que esto no es obligatorio, y podemos ponerle el nombre que queramos, si hubiéramos querido que el archivo se llamara "jlmm.zip", simplemente pondríamos en el copy() lo siguiente:
copy($archivo, "archivos/jlmm.zip")
Bien, espero te haya quedado claro, y espero tus comentarios.
Bye
Almonato

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas