ข้ามไปที่เนื้อหาหลัก

การนำ Upload.Class ของ Verot มาใช้งานร่วมกับ Codeignator


ผมเป็นคนหนึงที่ชื่นชอบ PHP Framework โดยหยิบเอาตัว Codeigniter มาใช้เป็นตัวแรก และก็ติดใจ ลองๆ ใช้ไปก็พบว่าเจ้าระบบอัพโหลดไฟล์ที่มีมาให้นั้น ยังไม่ค่อยครบครันเท่าไหร่ เพราะเขียนปกติจะใช้ Library upload ของ Verot อัพโหลด เพราะว่า Class นี้ค่อนข้างครบในตัวเองอยู่แล้ว มีตัวจัดการไฟล์เกือบหมด ทั้งรูปภาพ และไฟล์อื่นๆ



ขั้นตอนการนำ Library เข้ามาใช้งานปกติแล้ว Codeigniter มีกฎว่าจะต้องทำการโหลด Library เข้ามายังหน้า Controller ก่อนแต่ตัว Library upload นี้อยู่ในรูปแบบ Construct คือประกาศแล้วใช้งานเลย แถมยังกำหนดให้เรียกหาค่าของไฟล์ที่อัพโหลดทันที ซึ่งการที่จะใช้งานสามารถทำได้ โดยการสร้าง Library อีกตัวมาเรียกใช้งาน Library ตัวนี้

สร้างไฟล์ Library ผมตั้งชื่อว่า myupload.php เก็บไว้ที่ application/libraries/ และเก็บตัว Library upload ของ Verot ไว้ที่เดียวกัน เพื่อให้ง่ายต่อการเรียกใช้งาน

require_once(APPPATH.'libraries/class.upload/class.upload.php');

class MyUpload extends upload{
 
 public function MyUpload(){
  
 }
}

จากนั้นก็โหลดใช้งานได้จาก Controller ที่เราต้องการใช้งาน แบบนี้

$this->load->library('MyUpload');

ทีนี้เราก็จะสามารถใช้งาน Library ตัวได้แล้วครับ ซึ่งการใช้งานก็เหมือนที่เคยใช้ปกติครับ ผมมีตัวอย่างการใช้งานคร่าวๆ ครับ ซึ่งในตัวอย่างผมได้เขียน Method เพิ่มใน Library myupload แล้วเรียกใช้งานอีกที

public function imgUploadRatioY($srcFile, $file_dst_path, $file_new_name, $file_new_ext, $width){

  $this->upload($srcFile);
  
  if($this->uploaded){
   if($this->file_is_image){
    if($this->file_src_size < 2048000){
     
     $this->file_new_name_body = $file_new_name;
     $this->file_new_name_ext = $file_new_ext;
     $this->image_resize = TRUE;
     $this->file_force_extension = TRUE;
     $this->image_x = $width;
     $this->image_ratio_y = TRUE;
     $this->process($file_dst_path);
     
     if($this->processed){
      return $this->uploadFile = $this->file_dst_name;
     }else{
      return $this->error = 'เกิดความผิดพลาดกรุณาลองใหม่';
     }
    }else{
     return $this->error = 'ไฟล์มีขนาดใหญ่เกิน 2 MB';
    }
   }else{
    return $this->error = 'กรุณาใช้ไฟล์รูปภาพเท่านั้น';
   }
  }
 }

เวลาใช้งานเราก็เรียกแบบนี้เลยครับ ^ ^
if(!empty($_FILES['emag_cover']['tmp_name'])){
     $upload = $this->myupload->imgUploadRatioY($_FILES['emag_cover'], $path, $newFileName, 'gif', 150);
}else{
     $upload = '';
     $this->myupload->error = '';
}

เพียงเท่านี้เราก็จะสามารถใช้งาน Library Upload ของ Verot ได้แล้วครับ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเพิ่ม Font ภาษาไทยอื่นๆ เข้าไปใช้งานใน MPDF

เนื่องมาจากผมได้มีโอกาสจับงานที่ต้องแปลงหน้าเว็บให้เป็น PDF ลองๆ หาข้อมูลก็ไปเจอเจ้าตัวนี้ MPDF  ซึ่งจริงๆ แล้วก็มีให้ใช้งานอีกหลายๆ ตัว สาเหตุที่เลือกใช้งานตัวนี้เพราะมัน ค่อนข้างจะติดตั้ง และใช้งานง่าย และยังสามารถอ้างอิง CSS เข้ามาช่วยจัดหน้าตาใน PDF ได้อีกด้วย ซึ่งผลที่ได้เพี้ยนไปจากตัวจริงไม่มากครับ แต่ที่ทำให้เลือกใช้งานเพราะการเพิ่มฟ้อนท์ภาษาไทย เข้าไปนั้นค่อนข้างง่ายครับ เลยจะขอมาแนะนำดังนี้

การเขียน Force download ด้วย PHP

การทำ Force download ด้วย PHP นั้น ไม่ไช่เรื่องใหม่อะไร มีการเขียนโค้ดด้วยลักษณะนี้อยู่บ่อยๆ แต่ผมต้องนำมาแปะเป็นทริคเล็กน้อยกันตัวเองลืมครับ ประโยชน์ของมันคือในกรณีที่เราไม่สามารถเข้าไปจัดการ Apache config ได้เราสามารถใช้วิธีนี้แทนได้

แก้ไขปัญหา Laravel+Vite redirect ไปที่ path build

  ก่อนหน้านี้ติดปัญหาเรื่องการพัฒนาเว็บแอพลิเคชันด้วย Laravel และ Vuejs โดยใช้ Vite ควบคู่ในการพัฒนา Frontend ตอนรัน npm run dev ก็ดูเหมือนจะใช้งานได้ปกติ แต่พอมาลอง build ดูปรากฏว่าตัว application คอย redirect ไปที่ path /build ตลอดเลย พอหาข้อมูล ไปๆ มาๆ ก็เจอว่าตอนที่เขียนเราใช้ router ของฝั่ง vuejs ซึ่งทำเป็น SPA const router = createRouter({     history: createWebHistory(import.meta.env.BASE_URL), }); จากโค๊ดด้านบนนี่แหละที่ มึนอยู่หลาย ชั่วโมง แก้ง่ายๆ ที่สุด คือทำแบบนี้ const router = createRouter({     history: createWebHistory(), }); เข้าใจว่า import.meta.env.BASE_URL ค่า default น่าจะเป็น /build ถ้าเอาออกจะช่วยแก้ไขปัญหาได้ แต่ยังไม่ได้ลองว่าถ้าเราไปกำหนด env ตัวนี้ขึ้นมาก็อาจจะช่วยแก้ไขปัญหาได้ด้วยหรือเปล่า? VITE_BASE_URL="/" ใครลองแล้วได้ผลมาคอมเม้นกันด้วยนะ วันนี้ไปก่อนละ