dijous, 9 de febrer del 2012

Class upload, llibreria per gestiona pujades amb PHP

AVÍS: aquest article parla sobre un tema molt específic de programació així que no és per tots els públics.

Vaja, fa temps que no publico. Encara que ho sembli, el bloc no està mort, simplement és que he estat molt enfeinat preparant alguna petita novetat per Arcaron.

Justament, pel que estem preparant, he descobert una llibreria en PHP que crec que val la pena conèixer si ets programador perquè facilita la pujada i tractament d'imatges com ara avatars o icones.

És força comú que les aplicacions web demanin la pujada d'un avatar d'usuari per tal que sigui fàcilment identificable. Com a norma general, tots els frameworks donen suport natiu a aquesta funcionalitat, però a vegades és necessari programar-la. Aquí és on entra en joc la classe "Upload", una classe que pot ser descarregada de la pàgina de l'autor

La llibreria té una documentació força clara i és realment senzilla de fer servir. Algunes de les característiques que m'han portat a provar-la són:

  • Afegir marques d'aigua a les imatges només indicant l'origen de la imatge de marca d'aigua.
  • Re-escalat d'imatges tant mantenint proporcions com no mantenint-les
  • Control sobre quins fitxers poden pujar-se al servidor
  • Permet reprocessar més d'un cop les imatges per aconseguir més d'un format a partir d'una única pujada de l'usuari (per exemple, avatar gran i avatar petit)
  • Els missatges d'error són molt clars (estan a l'atribut "error")
  • Compatible amb els principals tipus d'imatge (jpg, png i gif)
A continuació poso un exemple de com es fa servir:

//agafem el camp del formulari anomenat 'imgfile'
if (isset($_FILES['imgfile'])) {
   //creem l'objecte
   $file = new Upload($_FILES['imgfile']);
   if ($file->uploaded) {
      $file->file_new_name_body = 'nom_arxiu_final'; //posar nom a l'arxiu final
      $file->allowed = array('image/*'); //format valid tot tipus d'imatge
      $file->image_resize = true; //volem reescalarla
      $file->image_x = 200; //mida horitzontal
      $file->$handle->image_ratio_y = true; //mantenir proporcio
      $file->image_watermark = 'marca.png'; //imatge de la marca d'aigua
      
      $file->process('..//imag/directori_desti/'); //processar l'enviament

      if ($file->processed) {
         $filename = $file->file_dst_name; //nom de l'arxiu final
         $file->clean(); //buidat
         echo "La imatge $filename ja s'ha processat"; 
      } else {
         echo "Error al processar l'enviament. $file->error";
      }
   } else {
      echo "La imatge no és vàlida. $file->error");
   }
}