Programación Web y Scripting > PHP

 Validar Upload De Archivos Al Servidor

(1/2) > >>

Mellileo:
Hola Genios

agradecería mucho a quien me ayudara con este problemilla!!

Resulta que tengo un script que realiza un upload de archivos al servidor web, pero necesito validar que los archivos que se suban sean únicamente de texto (planos).  He tratado de hacerlo manipulando los tipos MIME pero la comparación del tipo de archivo con la extención del mismo (según textos de consulta) no funciona... para entender un poco más el problemilla les mostraré parte del código que tengo:


--- Código: Text ---function SubirArchivo(){  global $HTTP_POST_FILES;  //datos del arhivo  $nombre_archivo = $HTTP_POST_FILES['userfile']['name'];  $tipo_archivo = $HTTP_POST_FILES['userfile']['type'];  $tamano_archivo = $HTTP_POST_FILES['userfile']['size'];  //compruebo si las características del archivo son las que deseo  if (!(strpos($tipo_archivo, "txt") && ($tamano_archivo < 600000)) {    echo "Nombre del fichero: $nombre_archivo"."<br>";    echo "Tamaño del fichero: $tamano_archivo <br>";    echo "Tipo del fichero: $tipo_archivo <br>";        echo "La extensión o el tamaño de los archivos no es correcta. <br><br><table><tr><td><li>Se permiten archivos .gif o .jpg<br><li>se permiten archivos de 100 Kb máximo.</td></tr></table>";  }else{    if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],  "modules/mat_validar/temp/".$nombre_archivo)){      // Carga los datos del archivo plano a la tabla de la BD.      CargarDatos();    }else{      echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";    }  }} 
Cómo hago para que valide que solamente suba archivo planos (.txt)???

Mil gracias por cualquier ayuda que me puedan ofrecer!!

Saludos,

Mellileo!!

Avalon:
Hola! En caso de que quieras comparar si un archivo es de tipo texto plano deberás comprobar que $tipo_archivo contiene el valor text/plain.

Pero si lo que quieres es comprobar si la extensión del archivo es .txt puedes hacerlo de esta forma


--- Código: Text ---$extension = substr($nombre_archivo, strrpos($nombre_archivo, ".")); if ((strtolower($extension) == ".txt") && ($tamano_archivo < 600000)) {   // aquí tu código ...}  

Espero que te sirva!

Salu2,
Avalon

Mellileo:
Hola de nuevo...

Gracias Avalon por tu ayuda.  Es muy interesante y útil tu recomendación sobre la extención del archivo, pero lo que requiero es que valide lo que mencionaste primero, que el archivo que se suba al servidor sea uno de tipo text/plain.

He tratado de hacerlo de la siguiente manera pero no me funciona:

--- Código: Text --- $nombre_archivo = $HTTP_POST_FILES['userfile']['name'];  $tipo_archivo = $HTTP_POST_FILES['userfile']['type'];  $tamano_archivo = $HTTP_POST_FILES['userfile']['size'];  //compruebo si las características del archivo son las que deseo  if (!strpos($tipo_archivo, "text/plain") && ($tamano_archivo <= 600000)) { //Conjunto de instrucciones }  
Cómo hago para que en la comparación con strpos(...) defina si es plano o no???

Mil gracias de nuevo por la ayude que me puedan prestar!!!

Avalon:
Hola! En este caso has de tener en cuenta que la función strpos retornará 0 si la subcadena text/plain se encuentra en la primera posición de la cadena $tipo_archivo, y ese 0 va a ser interpretado por tu if como false cuando en realidad debería hacerlo como true, pués realmente SI existe la subcadena dentro de la cadena. No se si me explico...

Como esto va a ser así siempre que el tipo de archivo sea text/plain te recomiendo que hagas la comparación directamente, sin usar esa función


--- Citar ---if ($tipo_archivo != "text/plain") { //El archivo no es de tipo texto plano }
--- Fin de la cita ---

Cualquier duda, aquí estamos :D

Salu2,
Avalon

Mellileo:
Gracias avalon!!!

Estoy muy agradecido con tu colaboración pues he realizado la validación como tu me la haz planteado y funciona a la perfección,  Gracias muchas gracias por eso.  

Respecto a la explicación de la función strpos(), he entendido lo que medices y tiene sentido, pero lo extraño del caso es que cuando lo hago con archivos tipo Gif o JPG funciona de maravilla.... es eso lo que me perturba, por qué con ese tipo de archivos si funciona bien, mientras que con los planos no... eso es un caso de estudio interesante.  Para que lo pongas en funcionamiento y verifiques lo que digo aquí está el código para que funcione subiendo imagenes.

Este es el código que carga la imagen a subir al servidor:


--- Código: Text ---<form action="subearchivo.php" method="post" enctype="multipart/form-data">    <input type="hidden" name="MAX_FILE_SIZE" value="100000">    <br>    <b>Enviar un nuevo archivo: </b>    <br>    <input name="userfile" type="file">    <br>    <input type="submit" value="Enviar">  </form> 
Y este es le código del archiivo que recibe lo enviado por el script anterior:


--- Código: Text ---//datos del arhivo$nombre_archivo = $HTTP_POST_FILES['userfile']['name'];$tipo_archivo = $HTTP_POST_FILES['userfile']['type'];$tamano_archivo = $HTTP_POST_FILES['userfile']['size'];//compruebo si las características del archivo son las que deseoif (!((strpos($tipo_archivo, "gif") || strpos($tipo_archivo, "jpeg")) && ($tamano_archivo < 100000))) {  echo "La extensión o el tamaño de los archivos no es correcta. <br><br><table><tr><td><li>Se permiten archivos .gif o .jpg<br><li>se permiten archivos de 100 Kb máximo.</td></tr></table>";}else{  if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],  $nombre_archivo)){    echo "El archivo ha sido cargado correctamente.";  }else{    echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";  }} 
Pruébalo y saca tus conclusiones....

De todas formas muchas gracias por tu ayuda... he resuelto el problema gracias a ti!!!

Saludos...

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa