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

การนำ 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 ได้เราสามารถใช้วิธีนี้แทนได้

การใช้งาน คำสั่ง file_exists() อย่างเข้าใจ

นี่อาจจะไม่เรื่องใหม่อะไรสำหรับ Professional ทั้งหลาย แต่ว่าสำหรับผมที่เข้าใจ และใช้งานอย่างผิดๆ มาตลอด จนบางทีก็เข้าใจว่า เราเขียนผิด หรือ คำสั่งมันใช้งานไม่ได้ วันนี้จะขอมาพูดถึงเรื่องของคำสั่ง PHP ที่ชื่อ file_exists เป็นคำสั่งที่ใช้สำหรับตรวจสอบไฟล์ว่ามีอยู่จริงหรือไม่? ตัวอย่างการใช้งานแบบผิดๆ ที่ผมใช้ก็คือ file_exists('/images/news/helloworld.jpg'); ผลลัพธ์ที่ได้คือ FALSE ถึงแม้ว้าจะมีไฟล์นั้นอยู่จริงก็ตาม ซึ่งในความเป็นจริงแล้ว การใช้งานที่ถูกต้องคือ file_exists($_SERVER['DOCUMENT_ROOT'] . '/images/news/helloworld.jpg'); จากตัวอย่างที่ถูกต้อง ทำให้เข้าใจแบบง่ายๆ ว่าคำสั่ง file_exists นั้นใช้สำหรับเช็ค path ในโฟลเดอร์จริงๆ เท่านั้น ไม่สามารถเช็คจาก URL ได้ อันนี้เป็นเรื่องง่ายๆ ที่ผมเข้าใจผิดมาอยู่นานเลยทีเดียวเลยต้องขอลงบันทึกเตือนตัวเองไว้อีกที :3