Posted on 04-05-2008
Filed Under (Desarrollo, PHP) by Programlocura

Hace un tiempo viendo la necesidad de hacer la subida de archivos un poco menos engorrosa escribi esta clase. No es de lo más util, y le falta mucha depuración, pero te saca de apuros =P.

PHP:
  1. // -------------------------------------------------------------------------------------
  2. // Operaciones con sus Metodos
  3. // -------------------------------------------------------------------------------------
  4. // setMaxSize($peso)                    Setea el Peso maximo que puede tener el archivo
  5. // setAllowedExtensions($extensiones)   Setea un array con las extensiones permitidas
  6. //
  7. // startUpload($ruta)               Procesa el archivo y lo almacena en la "ruta"
  8. //
  9. // getSize()                            Retorna el peso del archivo en Kb (Kilobytes)
  10. // getErrorMsg()                        Retorna un mensaje en caso de exito o de fallo
  11. // getErrorId()       Retorna la ID del Mensaje de error
  12. // getExtension()                  Retorna la extension del archivo
  13. // -------------------------------------------------------------------------------------
  14.  
  15. class Uploader {
  16.  
  17. var $archivo;
  18. var $temp_file;
  19.  
  20. var $max_size;
  21. var $arr_extensions;
  22. var $path;
  23. var $id_error;
  24. var $error;
  25.  
  26. var $size;
  27. var $extension;
  28.  
  29. function Uploader($file) {
  30. $this->archivo = $_FILES[$file]["name"];
  31. $this->temp_file = $_FILES[$file]["tmp_name"];
  32. $this->size = $_FILES[$file]["size"] / 1024;
  33. $posicion = strrpos($_FILES[$file]["name"],".")+1;
  34. $this->extension = substr($_FILES[$file]["name"], $posicion);
  35. }
  36.  
  37. function startUpload($ruta) {
  38. if ($this->max_size != "") {
  39. $a = $this->size;
  40. $b = $this->max_size;
  41. $c = $this->extension;
  42. $d = $this->arr_extensions;
  43.  
  44. $tmp = $this->temp_file;
  45. $arc = $this->archivo;
  46.  
  47. if (($a <$b) && (in_array($c, $d))) {
  48. // Copia
  49. if (copy($tmp, $ruta.$arc)) {
  50. $this->id_error = 1;
  51. }else{
  52. $this->id_error = 2;
  53. }
  54. }elseif ($a> $b){
  55. $this->id_error = 3;
  56. }elseif (!(in_array($c, $d))) {
  57. $this->id_error = 4;
  58. }
  59. }else{
  60. $this->id_error=5;
  61. }
  62. }
  63.  
  64. function setMaxSize($max) {
  65. $this->max_size = $max;
  66. }
  67.  
  68. function setAllowedExtensions($arr) {
  69. $this->arr_extensions = $arr;
  70. }
  71.  
  72. function getExtension() {
  73. return $this->extension;
  74. }
  75.  
  76. function getSize() {
  77. return $this->size;
  78. }
  79.  
  80. //
  81. // Se pueden Modificar los Mensajes para cada caso
  82. //
  83. function getErrorMsg() {
  84. switch($this->id_error) {
  85. case 1:
  86. $this->error = "El archivo se subió exitosamente";
  87. break;
  88. case 2:
  89. $this->error = "El archivo no pudo ser copiado a la ruta especificada";
  90. break;
  91. case 3:
  92. $this->error = "El Peso del archivo es mayor al permitido";
  93. break;
  94. case 4:
  95. $this->error = "No es una extension permitida";
  96. break;
  97. case 5:
  98. $this->error = "Debe subir un archivo y setear un peso maximo";
  99. break;
  100. }
  101.  
  102. return $this->error;
  103. }
  104.  
  105. function getErrorId() {
  106. return $this->id_error;
  107. }
  108. }
  109.  
  110. ?>

Es muy facil de utilizar, veamos un ejemplo rapido:

PHP:
  1. include_once("class.Uploader.inc.php");
  2. $ext = array(".jpg", ".jpeg");
  3. $up = new Uploader("file");
  4. $up->setMaxSize(5000);
  5. $up->setAllowedExtensions($ext);
  6. $up->startUpload("aqui_sube/");
  7. echo $up->getError();
  8. ?>

Como ven lo unico que hacemos es crear un objeto ($up) y le asignamos el nombre del "campo archivo".
Hay que gestionar mejor los errores al igual que comprobar algunas cosas mas... Pero es bueno para dar una idea de como hacer una clase util para manejar cosas que son siempre utiles para el programador... Una subida común nos podria llevar mas de 10 lineas de codigo, aqui solo nos lleva 5.

Descargá la clase: Uploader Class.

(0) Comments    Read More