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

การนำ 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 ได้อีกด้วย ซึ่งผลที่ได้เพี้ยนไปจากตัวจริงไม่มากครับ แต่ที่ทำให้เลือกใช้งานเพราะการเพิ่มฟ้อนท์ภาษาไทย เข้าไปนั้นค่อนข้างง่ายครับ เลยจะขอมาแนะนำดังนี้

การใช้งาน คำสั่ง 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

มาเข้าใจ และใช้ Datatable ดึงข้อมูลแบบ Server-side ด้วย PHP, MySQL กันเถอะ

มีช่วงหนึงผมเคยนำ datatable มาพัฒนาในงานแต่เกิดปัญหาเนื่องจากมีข้อมูลขนาดใหญ่ ทำให้เกิดการโหลดในครั้งแรกที่โหลดหน้าเพจนั้นๆ เนื่องจากผมใช้ Ajax ในการโหลดข้อมูลทั้งหมดมาในครั้งเดียวด้วยจำนวนข้อมูล 1000 ขึ้น ซึ่งตอนนั้นผมคิดว่าการทำ preload น่าจะช่วยได้ แต่ว่าถ้า user เกิดเผลอไปกด refesh หรือแก้ไขข้อมูลเวลากลับมาที่หน้าข้อมูลก็ต้องโหลดใหม่อีก ทำให้ผมเลิกใช้ datatable ไปเลย เพราะคิดว่ามันคงไม่เหมาะ แต่ในความจริงแล้ว datatable ก็ได้มีสิ่งที่มาแก้ในจุดนั้นได้ ซึ่งเรียกว่า server-side โดยการที่อนุญาตให้เรา query ข้อมูลออกมาก่อนแล้วส่งมาให้ datatable อ่านข้อมูลในจำนวนที่น้อยลง หลักการก็เหมือนๆ กับบทความการทำสร้าง XML จากข้อมูลขนาดใหญ่นั่นแหละครับ แต่มีเงื่อนไขเพียงแต่ว่า ต้อง Filter และส่งข้อมูลออกมาในรูปแบบที่ตรงตามหลักของ datatable เท่านั้น ( บางครั้งเวลาเข้าไปอ่าน Document หรือดู Example จะงงๆ ว่าอะไรเยอะแยะ ) โดยวันนี้จะมาแนะนำการใช้งานแบบง่ายๆ กันเลย :D